python之numpy练习题

python之numpy练习题

1.打印当前numpy版本
import numpy as np
print(np.version)
2. 构造一个全零的矩阵,并打印其占用的内存大小

z=np.zeros((5,5))

print(’%d bytes ’ %(z.size*(z.itemsize)))

200 bytes

打印一个函数的帮助文档,比如numpy.add
print(help(np.info(np.add)))
4. 创建一个一个10-49的数组,并将其倒序排列

cui_array=np.arange(10,50,1)

cui_array=cui_array[::-1]#这个操作是逆序操作

cui_array

array([49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,
15, 14, 13, 12, 11, 10])

找到一个数组中不为0的索引
np.nonzero([1,2,3,4,5,0,0,0,1234,0,1])

(array([ 0, 1, 2, 3, 4, 8, 10], dtype=int64),)

随机构造一个3*3的矩阵,并打印其中最大值与最小值
cui_array=np.random.random((3,3))

print(cui_array.min())

print(cui_array.max())

0.0331157699318
0.989006631203

构造一个5*5的矩阵,令其值都为1,并在最外层加一圈0
cui_array=np.ones((5,5))

cui_array2=np.pad(cui_array,pad_width=1,mode=‘constant’,constant_values=0)

print(cui_array2)

[[ 0. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 1. 1. 1. 1. 0.]
[ 0. 1. 1. 1. 1. 1. 0.]
[ 0. 1. 1. 1. 1. 1. 0.]
[ 0. 1. 1. 1. 1. 1. 0.]
[ 0. 1. 1. 1. 1. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0.]]

构建按月给shape 为(6,7,8)的矩阵,并找到第100个元素的索引值
np.unravel_index(100,(6,7,8))

(1, 5, 4)

对一个5*5的矩阵做一个归一化操作
cui_array=np.random.random((5,5))

cui_max=cui_array.max()

cui_min=cui_array.min()

cui_array=(cui_array-cui_min)/(cui_max-cui_min)

cui_array
array([[ 0.40147513, 0.34958265, 0.9278541 , 0.49219575, 0.23173742],
[ 0.51496323, 0. , 0.21397911, 0.08583846, 0.59277834],
[ 0.39900245, 0.16004913, 0.7244659 , 0.29351148, 0.16676602],
[ 0.451191 , 0.75388714, 0.45481551, 0.26463113, 0.21547826],
[ 0.19904299, 0.08345072, 0.35405198, 0.29433695, 1. ]])

10.找到两个数组中的相同的值

z1=np.random.randint(0,10,10)

z2=np.random.randint(0,10,10)

print(z1)

print(z2)

print(np.intersect1d(z1,z2))

[5 3 1 0 2 8 1 0 2 1]
[3 9 2 2 8 9 4 4 9 7]
[2 3 8]

得到今天、明天、昨天的日期
yesterday = np.datetime64(‘today’, ‘D’) - np.timedelta64(1, ‘D’)

today = np.datetime64(‘today’, ‘D’)

tomorrow = np.datetime64(‘today’, ‘D’) + np.timedelta64(1, ‘D’)

print(yesterday)

print(today)

print(tomorrow)

2019-03-30
2019-03-31
2019-04-01

12.得到一个月中所有的天

print(np.arange(‘2019-02’,‘2019-03’,dtype=‘datetime64[D]’))

[‘2019-02-01’ ‘2019-02-02’ ‘2019-02-03’ ‘2019-02-04’ ‘2019-02-05’
‘2019-02-06’ ‘2019-02-07’ ‘2019-02-08’ ‘2019-02-09’ ‘2019-02-10’
‘2019-02-11’ ‘2019-02-12’ ‘2019-02-13’ ‘2019-02-14’ ‘2019-02-15’
‘2019-02-16’ ‘2019-02-17’ ‘2019-02-18’ ‘2019-02-19’ ‘2019-02-20’
‘2019-02-21’ ‘2019-02-22’ ‘2019-02-23’ ‘2019-02-24’ ‘2019-02-25’
‘2019-02-26’ ‘2019-02-27’ ‘2019-02-28’]

13.得到一个数的整数部分

z=np.random.uniform(0,10,10)

print(z)
print(np.floor(z))
[ 7.53416413 8.63699381 3.28976011 2.30375631 3.31931026 1.19033216
6.61053833 8.79116362 9.50696918 3.70707166]
[ 7. 8. 3. 2. 3. 1. 6. 8. 9. 3.]

14.构造一个数组,让它不能被改变

z=np.zeros(5)

z.flags.writeable=False

z#如果加上一句z[0]=1则会出现错误,则是因为该程序只能读不能写

array([ 0., 0., 0., 0., 0.])

15.打印大数据中的部分值于全部值

np.set_printoptions(threshold=5)#threshold=5只打印5组数据 threshold=np.nan打印全部数据

z=np.zeros((15,15))

z

array([[ 0., 0., 0., …, 0., 0., 0.],
[ 0., 0., 0., …, 0., 0., 0.],
[ 0., 0., 0., …, 0., 0., 0.],
…,
[ 0., 0., 0., …, 0., 0., 0.],
[ 0., 0., 0., …, 0., 0., 0.],
[ 0., 0., 0., …, 0., 0., 0.]])

16.找到在一个数组中,最接近一个数的索引

z=np.arange(100)

v=np.random.uniform(0,100)

print(v)

index=(np.abs(z-v)).argmin()

print(z[index])

17.317573493455217
17

17.32位float类型和32位int类型转换

17.32位float类型和32位int类型转换

z=np.arange(10,dtype=np.int32)

print(z.dtype)

z=z.astype(np.float32)

print(z.dtype)

int32
float32

18.打印数组元素位置坐标与数值

z=np.arange(9).reshape(3,3)

for index,value in np.ndenumerate(z):

print(index,value)
1
(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 3
(1, 1) 4
(1, 2) 5
(2, 0) 6
(2, 1) 7
(2, 2) 8

19.按照数组的某一列进行排序

z=np.random.randint(0,10,(3,3))

print(z)

print(z[z[:1].argsort()])

[[2 6 0]
[9 2 5]
[4 1 3]]
[[[4 1 3]
[2 6 0]
[9 2 5]]]

20.统计数组中每个数值出现的次数

z=np.array([1,1,1,2,2,3,3,4,5,8,])

np.bincount(z)

bincount输出的数列长度比原数列最大值大1

#原因:数列长度跟indice相关,indice想要覆盖原数列画直方图当然要到最大值,但它开始于0(这你要问我为什么我也不会回答的),所以会大一个。关于minlength有一些说法,在此不作说明。

#2. 这个函数的操作范围是非负整数

#原因: 返回值是频次,对应的横轴是indice,indice是从0开始的整数

array([0, 3, 2, …, 0, 0, 1], dtype=int64)

21.如何对一个四维数组的最后两维来求和

z=np.random.randint(0,10,(4,4,4,4))

res=z.sum(axis=(-2,-1))#求最后两个维的和可以用axis把轴写上就好

print(res)

[[85 70 67 80]
[69 68 77 89]
[68 87 74 65]
[63 70 61 58]]

22.交换矩阵中的两行

z=np.arange(25).reshape(5,5)

print(z)

z[[0,1]]=z[[1,0]]#交换矩阵当中的两行

print(z)

[[ 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]]
[[ 5 6 7 8 9]
[ 0 1 2 3 4]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]

找到一个数组当中最常出现的数字
z=np.random.randint(0,10,50)

print(z)

print(np.bincount(z).argmax())

[2 7 3 …, 3 1 0]
3

24.快速查找TOP k

z=np.arange(10000)

np.random.shuffle(z)

n=5

print(z[np.argpartition(-z,n)[:n]])

[9999 9998 9997 9996 9995]

25.去掉一个数组中,所有元素都相同的数据

np.set_printoptions(threshold=np.nan)

z=np.random.randint(0,2,(10,3))

z

array([[1, 0, 0],
[1, 0, 0],
[1, 1, 0],
[1, 1, 1],
[0, 0, 0],
[1, 1, 1],
[1, 0, 0],
[1, 0, 1],
[0, 1, 1],
[0, 1, 0]])
————————————————
版权声明:本文为CSDN博主「奋豆儿小米粒」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27008327/article/details/88930122

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值