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