Numpy笔记

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值数组
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值