Numpy Array用法
Array 的创建
直接声明内容
如:
ax = np.array([1,2,3,4,5,6])
ay = np.array([{'a':1,'b':2},4])
声明同时也可加上内容type的指定,如:
xi = np.array(['1','2','3'],'int')
创建之后还可以进行形状的更改
ax.reshape(3,2)
得到
array([
[1, 2],
[3, 4],
[5, 6]])
添加新轴
一些特殊的array…
Arange函数
ax = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
ax = np.arange(10)**2 #[ 0 1 4 9 16 25 36 49 64 81]
Ones函数
ax = np.ones(10) #[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]类型为浮点
Zeros函数
ax = np.ones(10) #[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]类型也是浮点
Identity函数
np.identity(10)#一个十维的identity矩阵
生成服从随机分布的数字
np.random.normal(size=10)
np.random.normal(size=(100,100))
np.random.exponential()
np.random.exponential(1.0,size=(6,3))
np.random.randint(-10,10,size=(9,9))
Array的运算
自身的统计学feature
x = np.array([13,24,21.2,17.6,21.7],'float')
print(x.sum(),x.mean(),x.std(),sep='\n')
加减乘除
相同维度array之间的加减乘除都是由同位置元素运算组成
x = np.array([13,24,21.2,17.6,21.7],'float')
y = np.array([1,3,4,7,2],'float')
x - y #array([12. , 21. , 17.2, 10.6, 19.7])
x + y #array([14. , 27. , 25.2, 24.6, 23.7])
x*y #array([ 13. , 72. , 84.8, 123.2, 43.4])
x/y #array([13. , 8. , 5.3 , 2.51428571, 10.85 ])
array与数字相乘 结果为每个元素与该数字相乘
ax = np.arange(10)
ax*2#array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
需要类似线性代数中矩阵乘积可以如下:
np.dot(ax,ax.reshape(10,1))# array([285])
广播性质 Broadcast
当数组维度不同时numpy会尝试自动补齐,如下图例子所示,numpy自动将ax复制三次使其变成3x3矩阵与ay相加。
Array的索引和切片
例:
a =
[ 1 4 7 10 13 16 19] 一维
ax =
[[ 0 1 2 3 4] 多维
[ 5 6 7 8 9]
[10 11 12 13 14]]
中间用逗号分隔
a[[1,4]] #array([ 4, 13]) 取第二位和第五位
ax[[2,0],[1,2]] #array([11, 2]) 取第三行第二位和第一行第三位,先看每组第一个数,再看每组第二个数
在二维数组中提取另一个二维数组
rows2 = np.array([[0,1],[0,2]]) #row里面四个数是输出的四个数分别的横坐标索引
cols2 = np.array([[0,0],[0,4]]) #是分别的纵坐标索引
ax[rows2,cols2]
输出为:
array([
[0, 5],
[0, 14]
])
中间用冒号分隔(切片)
例子同上:
a =
[ 1 4 7 10 13 16 19] 一维
ax =
[[ 0 1 2 3 4] 多维
[ 5 6 7 8 9]
[10 11 12 13 14]]
a[2:7:2] #array([ 7, 13, 19]) #从第三个数字开始一直到第七个结束,一隔一
一维数组切片获得矩阵
ax = np.array([4,3,9,2,1,6])
ay = np.array([[2,4],[1,3]])
ax[ay]
结果为
array([
[9, 1],
[3, 2]])
多维切片获得矩阵
ax[1:3,2:4] #第二行到第三行,第三列到第四列
结果为
array([
[ 7, 8],
[12, 13]])
Array运用逻辑判定取值
boolean
ax = np.array([1,4,7,9,2,3,10,11,34,2])
ax[ax<7]# ax<7本身会返回一个boolean类型的array
#结果为array([1, 4, 2, 3, 2])
names = np.array(['Bill','Sally','Qing','Savitri','Giovanni'])
bonus = np.array([232300.56,478123.45,3891.24,98012.36,52123.50])
names[bonus > 130000]
#array(['Bill', 'Sally'], dtype='<U8')
batch
对被筛选出来的元素进行处理
ax = np.array([4,9,2,4,0,25,0])
print(np.sum(ax>5))#2
print(np.count_nonzero(ax))#5
print(np.any(ax>10))# True
print(np.all(ax>0))# False
研究一个特定的array内元素,用别的array元素作为判定条件
names = np.array(['Bill','Sally','Qing','Savitri','Giovanni'])
bonus = np.array([232300.56,478123.45,3891.24,98012.36,52123.50])
gender = np.array(['M','F','F','F','M'])
#计算所有女性奖金低于100000的员工们的奖金平均值
np.mean(bonus[(gender=='F')&(bonus<100000)])
Logical
两个函数,logical_and,logical_or
np.logical_and(bonus>90000.0, bonus<400000 )#返回boolean值数组