numpy 中的一些函数用法
- 对于一个一维数组Z,其以下表达式的结果如下:
import numpy as np
Z = np.arange(10)
Z = Z**Z
用以上代码生成的Z数组为[0,1,2,3,4,5,6,7,8,9],而Z**Z
的内部计算方式为 [0^0,1^1,2^2,……9^9
].
- 对于一个一维数组,以下表达式的计算结果如下:
Z = np.arange(10)
print(2<<Z>>2)
>>>
[ 0 1 2 4 8 16 32 64 128 256]
其计算过程可以简单描述为,[2^(0+1)/4,2^(1+1)/4 …… 2^(9+1)/4]
即 2<<Z 表示为[2^(0+1),2^(1+1) …… 2^(9+1)]
,而Z>>2 就是简单的每个元素除以4了。
- 复数域和实数域中sqrt(-1)的差别
有如下表达式,其计算结果分别如下所示:
print(np.sqrt(-1)) #输出结果为Nan
print(np.emath.sqrt(-1)) #输出结果为1j
>>>
nan
>>>
1j
-
np.add.reduce()
的详细计算过程可以由以下代码实现,reduce
的作用,是把add函数作用于矩阵a的每一维的对应位置上的元素相加,计算这些元素。
import numpy as np
a = np.arange(45).reshape(3,3,5)
print(a)
b = np.add.reduce(a)
print(b,'\n')
c = []
for j in range(3):
d = []
for i in range(5):
print(a[:,j,i],'\t',sum(a[:,j,i]))
d.append(sum(a[:,j,i]))
c.append(d)
print(np.array(c))
详细的计算过程,如下输出结果所示:
>>>
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]],
[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]],
[[30 31 32 33 34]
[35 36 37 38 39]
[40 41 42 43 44]]],
计算结果:
[[45 48 51 54 57]
[60 63 66 69 72]
[75 78 81 84 87]]
计算过程:
[ 0 15 30] 45
[ 1 16 31] 48
[ 2 17 32] 51
[ 3 18 33] 54
[ 4 19 34] 57
[ 5 20 35] 60
[ 6 21 36] 63
[ 7 22 37] 66
[ 8 23 38] 69
[ 9 24 39] 72
[10 25 40] 75
[11 26 41] 78
[12 27 42] 81
[13 28 43] 84
[14 29 44] 87
最后输出:
[[45 48 51 54 57]
[60 63 66 69 72]
[75 78 81 84 87]]
- 关于求取最大值的说明:
Z = np.random.random(10)
print(Z.max()) #向量的最大值
print(Z.argmax()) #向量最大值的索引
- 关于np.bincount(X,W,minlength)函数,有如下用法:
- 不指定权重参数W,
np.bincount(X)
输出是一个其索引值出现的次数,如下代码所示:
X = [0,1,3,2,5,6,3,3]
print(np.bincount(X))
运行如上代码,输出结果为:[1,1,1,3,0,1,1],需要注意的是,输出数组的长度比数组中的最大值+1
- minlength参数被指定之后,输出数组的长度为minlength,如下代码所示:
X = [0,2,4,4,2,4,5,6,6]
print(np.bincount(X,minlength = 10))
运行以上代码,输出结果为:[1,0,1,0,3,1,2,0,0,0]
- 当weigths参数被指定时,运行结果可以用以下代码详解:
# 关于np.bincount指定权重向量的用法
import numpy as np
X = [1,2,3,4,5,6]
I = [1,3,9,3,4,1]
#最大值是9,所以输出F包含10个元素
#F[0] = 0
#F[1] = X[I[i=1]] = X[0] + X[6] = 1 + 6 = 7
#f[2] = 0 ,I中没有出现2
#F[3] = X[I[i = 3]] = X[1] + X[4] = 6
#F[4] = X[I[i = 4]] = X[5] = 5
#F[5] = 0 I中没有5
#F[6] = 0 I中没有出现6
#F[7] = 0 I中没有出现7
#F[8] = 0 I中没有出现8
#F[9] = X[I[i=9]] = X[4] = 3
F = np.bincount(I,X)
print(F)
>>>[0. 7. 0. 6. 5. 0. 0. 0. 0. 3.]