numpy的函数应用

1.numpy的基本操作函数
1)astype(dtype):对数组元素进行数据类型的转换

定义一维数组 a = [1,2,3,4]并将其元素转换为float类型

a = np.array([1,2,3,4])
a.dtype
Out[6]:
dtype(‘int32’)

b = a.astype(np.float)
b.dtype
Out[7]:
dtype(‘float64’)
a.dtype = np.float
a.dtype
Out[8]:
dtype(‘float64’)

2)reshape(tuple):对数组的维度进行调整

定义数组如下

#b = array([[ 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]])

b = np.arange(0,32,2).reshape(2,8)
b
Out[15]:
array([[ 0, 2, 4, 6, 8, 10, 12, 14],
[16, 18, 20, 22, 24, 26, 28, 30]])

import matplotlib.pyplot as plt
c = np.arange(0,1800).reshape(20,30,3)
plt.imshow©

将上述数组转换为一维数组array([ 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])

b.reshape(16)
Out[21]:
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30])

3)concatenate((array1,array2,…),axix):将两个或多个数组相连
注意:在做行连接是必须保证两个或多个数组列数相同

定义数组n1 = [[1,2],[3,4]]和n2=[[‘a’,’‘b’],[‘c’,‘d’],[‘e’,‘f’]]

n1 = np.arange(1,7).reshape(3,2,)
n1
Out[37]:
array([[1, 2],
[3, 4],
[5, 6]])

n2 = np.array([[‘a’,‘b’],[‘c’,‘d’],[‘e’,‘f’]])
n2
Out[32]:
array([[‘a’, ‘b’],
[‘c’, ‘d’],
[‘e’, ‘f’]], dtype=’<U1’)

将n1和n2数组进行连接

np.concatenate((n1,n2))
Out[38]:
array([[‘1’, ‘2’],
[‘3’, ‘4’],
[‘5’, ‘6’],
[‘a’, ‘b’],
[‘c’, ‘d’],
[‘e’, ‘f’]], dtype=’<U11’)

将n1与n2按列进行连接

np.concatenate((n1,n2),axis=1)
Out[39]:
array([[‘1’, ‘2’, ‘a’, ‘b’],
[‘3’, ‘4’, ‘c’, ‘d’],
[‘5’, ‘6’, ‘e’, ‘f’]], dtype=’<U11’)
注 :按行连接需要列相同,按列连接需要行相同

4)切分 split(array,num,axis):将数组array切分为num份。

将数组b平均分成两份

d = b.reshape(4,4)
d
Out[40]:
array([[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22],
[24, 26, 28, 30]])

np.split(d,2)
Out[41]:
[array([[ 0, 2, 4, 6],
[ 8, 10, 12, 14]]),
array([[16, 18, 20, 22],
[24, 26, 28, 30]])]

np.split(d,(1,3))
Out[45]:
[array([[0, 2, 4, 6]]),
array([[ 8, 10, 12, 14],
[16, 18, 20, 22]]),
array([[24, 26, 28, 30]])]

将数组b按列分为4份

np.split(d,4,axis=1)
Out[46]:
[array([[ 0],
[ 8],
[16],
[24]]),
array([[ 2],
[10],
[18],
[26]]),
array([[ 4],
[12],
[20],
[28]]),
array([[ 6],
[14],
[22],
[30]])]

2.统计函数
1)求和 sum(array,axis)
b
Out[49]:
array([[ 0, 2, 4, 6, 8, 10, 12, 14],
[16, 18, 20, 22, 24, 26, 28, 30]])

将数组b中元素求和

np.sum(b)
Out[48]:
240

将数组b中元素每一列的元素求和

np.sum(b,axis=0)
Out[51]:
array([16, 20, 24, 28, 32, 36, 40, 44])

将数组b中元素每一行的元素求和

np.sum(b,axis=1)
Out[52]:
array([ 56, 184])
axis的值为1时表示行,axis的值为0时表示列
2)算数平均值 mean(array,axis)

计算数组b的算数平均值

np.mean(b)
Out[53]:
15.0

计算数组b每一列元素的算数平均值

np.mean(b,axis=0)
Out[55]:
array([ 8., 10., 12., 14., 16., 18., 20., 22.])

计算数组b每一行元素的算数平均值

np.mean(b,axis=1)
Out[56]:
array([ 7., 23.])

3)加权平均值 average(array,weights=权重列表)

已知某同学的成绩为平时成绩=900.4 期末成绩=800.6,计算该同学的总成绩

score = np.array([90,80])
w = [0.4,0.6]
totle = np.average(score,weights=w)
totle
Out[58]:
84.0

4)方差 var(array,axis)

已知数据样本 n1 = [23,0.5,10,4,56,3] n2 = [12,18,21,13,15],判断哪个数据样本的波动较大

n3 = np.array([23,0.5,10,4,56,3])
n4 = np.array([12,18,21,13,15])
np.var(n3)
Out[63]:
373.03472222222234
np.var(n4)
Out[64]:
10.959999999999999

5)标准差 std(array,axis)

计算n1和n2的标准差

np.std(n3)
Out[67]:
19.314106819167755
np.std(n4)
Out[68]:
3.3105890714493698

6)最大值max(array,axis)

计算数组b的最大值

np.max(b)
Out[69]:
30

计算数组b每一行的最大值

np.max(b,axis=1)
Out[71]:
array([14, 30])

计算数组b每一列的最大值

np.max(b,axis=0)
Out[72]:
array([16, 18, 20, 22, 24, 26, 28, 30])

7)最小值min(array,axis)

计算数组b的最小值

np.min(b)
Out[74]:
0

计算数组b每一行的最小值

np.min(b,axis=1)
Out[75]:
array([ 0, 16])

计算数组b每一列的最小值

np.min(b,axis=0)
Out[76]:
array([ 0, 2, 4, 6, 8, 10, 12, 14])

8)最大值与最小值的差ptp(array,axis)

计算数组b最大值与最小值的差

np.ptp(b)
Out[77]:
30

计算数组b每一行最大最小值差

np.ptp(b,axis=1)
Out[78]:
array([14, 14])

计算数组b每一列最大最小值差

np.ptp(b,axis=0)
Out[80]:
array([16, 16, 16, 16, 16, 16, 16, 16])

9)最大值索引 argmax(array,axis)

将b中元素打乱

np.random.shuffle(b)
b
Out[81]:
array([[16, 18, 20, 22, 24, 26, 28, 30],
[ 0, 2, 4, 6, 8, 10, 12, 14]])

b中元素最大值的索引

np.argmax(b)
Out[82]:
7

np.argmax(b,axis=0)
Out[83]:
array([0, 0, 0, 0, 0, 0, 0, 0], dtype=int64)

np.argmax(b,axis=1)
Out[84]:
array([7, 7], dtype=int64)
10)累计求和cumsum()

计算b的累计和

np.cumsum(b)
Out[85]:
array([ 16, 34, 54, 76, 100, 126, 154, 184, 184, 186, 190, 196, 204,
214, 226, 240], dtype=int32)

计算数组b每一列的累计和

np.cumsum(b,axis=0)
Out[86]:
array([[16, 18, 20, 22, 24, 26, 28, 30],
[16, 20, 24, 28, 32, 36, 40, 44]], dtype=int32)

计算数组b每一行的累计和

np.cumsum(b,axis=1)
Out[87]:
array([[ 16, 34, 54, 76, 100, 126, 154, 184],
[ 0, 2, 6, 12, 20, 30, 42, 56]], dtype=int32)
11)累计求积cumprod()

计算b的累计和积

b.dtype = np.int64
np.cumprod(b)
Out[90]:
array([ 77309411344, 3058016715072, 109126529064448,
4045103278802944, 1847179534663680, 7388718138654720,
59109745109237760, 709316941310853120], dtype=int64)

计算数组b每一列的累计积

np.cumprod(b,axis=0)
Out[91]:
array([[ 77309411344, 94489280532, 111669149720, 128849018908],
[ 137438953472, 893353197648, 1924145348800, 3229815406928]],
dtype=int64)

计算数组b每一行的累计积

np.cumprod(b,axis=1)
Out[92]:
array([[ 77309411344, 3058016715072, 109126529064448,
4045103278802944],
[ 8589934592, 34359738368, 274877906944,
3298534883328]], dtype=int64)

3.排序函数
1)sort(array,axis)数值排序

定义一个随机整数数组 值范围为1-20,生成10个元素并转换为2*5的二维数组

n = np.random.randint(1,20,10).reshape(2,5)
n
Out[95]:
array([[15, 15, 17, 16, 2],
[ 3, 14, 8, 19, 16]])

将该数组进行排序

np.sort(n)
Out[96]:
array([[ 2, 15, 15, 16, 17],
[ 3, 8, 14, 16, 19]])

将该数组按行排序

np.sort(n,axis=1)
Out[98]:
array([[ 2, 15, 15, 16, 17],
[ 3, 8, 14, 16, 19]])

2)索引显示排序结果 argsort()

将数组n用索引显示排序结果

np.argsort(n)
Out[99]:
array([[4, 0, 1, 3, 2],
[0, 2, 1, 4, 3]], dtype=int64)

4.筛选元素的函数
1)where(条件列表,条件满足时显示数组,条件不满足是显示的数组)
a1 = np.array([1,2,3,4])
a2 = np.array([4,5,6,7])

条件数组为 t = [True,True,False,True],从a1和a2中筛选出满足条件的数组

t = [True,True,False,True]
np.where(t,a1,a2)
Out[103]:
array([1, 2, 6, 4])

2)all()

判断数组a1中是否都大于0

np.all(a1>0)
Out[104]:
True

判断数组a2中元素是否都为奇数

np.all(a2%2!=0)
Out[106]:
False

3)any()

判断数组a1中是否含有大于2的数

np.any(a1>2)
Out[107]:
True

判断数组a2中是否含有偶数

np.any(a2%2==0)
Out[108]:
True

4)in1d() : 判断a1数组中是否含有a2数组中相同的元素

判断a2中是否与a1有重复的元素

np.in1d(a2,a1)
Out[109]:
array([ True, False, False, False])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值