avatar

Numpy-ndarray运算

一、逻辑运算

1.布尔运算

​  通过< , >号判断数组全部值是否符合条件,如是否大于1,大于1会置为True,小于1会置为False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#生成0到1之间,8行10列均匀分布的数组
stock_change = np.random.normal(0,1,(8,10))
#大于0.5的值置为True,否则置为False
stock_change > 0.5

array([[False, False, False, False, False, False, False, False, False,
True],
[False, True, False, False, False, False, False, False, False,
True],
[False, True, False, True, True, True, False, False, True,
False],
[ True, True, False, False, False, False, False, False, False,
False],
[False, False, False, True, False, False, True, False, True,
False],
[False, True, False, False, True, True, True, False, False,
True],
[ True, False, True, True, False, False, False, False, False,
False],
[ True, False, True, True, True, False, False, True, False,
False]])
#将大于0.5的数置为1.1
stock_change[stock_change>0.5]=1.1

2.通用判断函数

  np.all(布尔值)

​  只要有一个False,就返回False;只有全是True才返回True

1
2
3
np.all( stock_change[0:2,0:5]>0)

False

  np.any(布尔值)

​  只要有一个True,就返回True;只有全是False才返回False

1
2
np.any( stock_change[0:2,0:5]>0)
True

3.三元运算符

  np.where(布尔值,True的位置的值,False的位置的值)

1
2
3
4
5
6
7
8
temp = stock_change[:4,:4]
#判断数组中的值是否大于0,是置于1,否置为0
np.where(temp>0,1,0)

array([[0, 1, 0, 1],
[0, 1, 1, 0],
[1, 1, 0, 1],
[1, 1, 0, 0]])

复合逻辑运算

​  np.logical_and( ) 与运算

​  np.logical_or( ) 或运算

1
2
3
4
5
6
7
8
9
10
11
12
#挑选大于0.5并且小于1的数
np.logical_and(temp>0.5,temp<1)
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False]])
#挑选大于0.5或小于1的数
np.logical_or(temp>0.5,temp<1)
array([[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True]])

二、统计运算

1.统计指标函数

  常见函数min、max、mean(平均值)、median(中位数)、var(方差)、std(标准差)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#调用方法
#1.temp.max(1)
#2.np.max(temp,0)
#1表示按行,0表示按列
temp
array([[-0.64249698, 0.20527198, -0.25116011, 0.21976393],
[-1.03996567, 1.1 , 0.37277963, -0.57377565],
[ 0.29487292, 1.1 , -1.39841772, 1.1 ],
[ 1.1 , 1.1 , -1.18514356, -0.11440521]])
#按列寻找最大值
temp.max(0)
array([1.1 , 1.1 , 0.37277963, 1.1 ])
#按行寻找最大值
temp.max(1)
array([0.21976393, 1.1 , 1.1 , 1.1 ])

2.返回最大值、最小值所在位置

1
2
3
4
5
6
7
8
#np.argmax(temp, axis=)  按行:1,按列:0

#np.argmin(temp, axis=)
np.argmax(temp,1)
array([3, 1, 1, 0], dtype=int64)

np.argmin(temp,0)
array([1, 0, 2, 1], dtype=int64)

三、数组间运算

1.数组与数的运算

​   相当于数组每个数都进行相同的运算

1
2
3
4
arr1 = np.array([[1,2,3,2,1,4],[5,6,1,2,3,1]])
arr1 + 10
array([[11, 12, 13, 12, 11, 14],
[15, 16, 11, 12, 13, 11]])

2.数组与数组运算

广播机制

​   方便不同形状的ndarray进行运算

 可以运算的情况:

  1.维度相等

  2.shape 其中对应一个地方为1

3.矩阵运算

3.1矩阵存储方法

1.ndarrary二维数组

1
2
3
data = np.array([[80,86],[82,80]])
array([[80, 86],
[82, 80]])

2.matrix数据结构

1
2
3
np.mat([[80,86],[82,80]])
matrix([[80, 86],
[82, 80]])

3.2矩阵乘法运算

要求:

    形状:(m , n) * (n , l)

运算规则:1.ndarray存储

                    np.matmul(arr1,arr2)

                    np.dot(arr1,arr2)

​                  2.matrix存储

​                     arr1 * arr2

​ 注:ndarray存储相乘需要满足广播机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
weights_mat
matrix([[0.3],
[0.7]])
data = np.array([[80,86],
[82,80],
[85,78],
[90,90],
[86,82],
[82,90],
[78,80],
[92,94]])
data * weights_mat
matrix([[84.2],
[80.6],
[80.1],
[90. ],
[83.2],
[87.6],
[79.4],
[93.4]])

评论