Numpy 练习题¶
打印当前Numpy版本
In [1]:
import numpy as np
In [2]:
print(np.__version__)
造一个全零矩阵,并打印其占用的内存大小
In [3]:
z=np.zeros((5,5))
print('%d bytes'%(z.size*z.itemsize))
打印一个函数的帮助文档,比如numpy.add
In [4]:
print(help(np.info(np.add)))
创建一个10-49的数组,并将其倒序排列
In [5]:
tang_array=np.arange(10,50,1)
tang_array=tang_array[::-1]
tang_array
Out[5]:
找到一个数组不为0的索引
In [6]:
np.nonzero([1,2,3,4,5,0,0,0,0,123,22,0,1])
Out[6]:
随机构造一个3*3矩阵,并打印其中最大与最小值
In [7]:
tang_array=np.random.random((3,3))
print(tang_array.min())
print(tang_array.max())
构造一个5*5的矩阵,令其值都为1,并在最外层加上一圈0
In [8]:
tang_array=np.ones((5,5))
tang_array=np.pad(tang_array,pad_width=1,mode='constant',constant_values=0)#pad是填充,指定填充的层数,模式,值
tang_array
Out[8]:
In [9]:
print(help(np.pad))
构建一个shape为(6,7,8)的矩阵,并找到第100个元素的索引值
In [10]:
np.unravel_index(100,(6,7,8))
Out[10]:
对一个5*5的矩阵做归一化操作
In [11]:
tang_array=np.random.random((5,5))
tang_max=tang_array.max()
tang_min=tang_array.min()
tang_array=(tang_array-tang_min)/(tang_max-tang_min)
tang_array
Out[11]:
找到两个数组中相同的值
In [12]:
A=np.random.randint(0,10,10)
B=np.random.randint(0,10,10)
print(A)
print(B)
print(np.intersect1d(A,B))
得到今天 昨天 明天 的日期
In [13]:
yesterday=np.datetime64('today','D')-np.timedelta64(1,'D')
today=np.datetime64('today','D')
tomorrow=np.datetime64('today','D')+np.timedelta64(1,'D')
print(today)
print(tomorrow)
print(yesterday)
得到一个月中所有的天
In [14]:
np.arange('2017-10','2017-11',dtype='datetime64[D]')
Out[14]:
得到一个数的整数部分
In [15]:
z=np.random.uniform(0,10,10)
np.floor(z)#得到整数部分
Out[15]:
构造一个数组,让它不能被改变
In [16]:
z=np.zeros(5)
z.flags.writeable=Flalse#z只可以读不可以写
z[0]=1
打印大数据的部分值,全部值
In [17]:
np.set_printoptions(threshold=5)#限制阀值为5,
z=np.zeros((15,15))
z
Out[17]:
In [18]:
np.set_printoptions(threshold=10000)#打印全:threshold这个参数需要设置成一个很大的数不然会报错
z=np.zeros((15,15))
z
Out[18]:
找到在一个数组中最接近一个数的索引
In [19]:
z=np.arange(100)
v=np.random.uniform(0,100)
print(v)
index=(np.abs(z-v)).argmin()#广播功能
print(z[index])
32位float类型和32位int类型转换
In [20]:
z=np.arange(10,dtype=np.int32)
print(z.dtype)
z=z.astype(np.float32)
print(z.dtype)
打印数组元素的位置坐标和数值
In [21]:
z=np.arange(9).reshape(3,3)
for index,value in np.ndenumerate(z):
print(index,value)
按照数组的某一列进行排列
In [22]:
z=np.random.randint(0,10,(3,3))
print(z)
print(z[z[:,1].argsort()])#1:代表第二列,按照第二列排序
统计数组中每个数值出现的次数
In [23]:
z=np.array([1,1,1,2,2,3,3,3,4,5,8])
np.bincount(z)#0:有0个 1:有3个 2:有3个……8:有1个
Out[23]:
如何对一个四位数组最后两维来求和
In [24]:
z=np.random.randint(0,10,(4,4,4,4))#4维数组
res=z.sum(axis=(-2,-1))#后两维
res
Out[24]:
交换矩阵中的两行
In [25]:
z=np.random.randint(0,25,(5,5))
z[[1,0]]=z[[0,1]]#交换行数
z
Out[25]:
找到数组里最常出现的数字
In [26]:
z=np.random.randint(0,10,50)
print(np.bincount(z).argmax())#argmax():在计数后,值最大所对应位置的具体值
快速查找TOP k
In [27]:
z=np.arange(10000)
np.random.shuffle(z)#洗牌
n=5
print(z[np.argpartition(-z,n)[:n]])#np.argpartition(-z,n):找最大的z=》-z 找多少个 :n [:n]:取前n个
去掉一个数组中,所有元素都相同的数组
In [28]:
np.set_printoptions(threshold=10000)#打印全:threshold这个参数需要设置成一个很大的数
z=np.random.randint(0,5,(10,3))
z
Out[28]:
In [29]:
e=np.all(z[:,1:]==z[:,:-1],axis=1)
print(e)
In [42]:
A=np.where(e==1)[0]
B=np.delete(z,2,axis=0)#delete,z不会变,要重新赋一个变量
z
#Z=z[~e]
#Z
Out[42]:
In [31]:
a=np.array([1,2,3,4])
b=np.array([1,2,3,5])
np.all(a==b)#判断所有的是否一样
Out[31]:
In [ ]:
np.any(a==b)#判断任何是否一样