Numpy习题

numpy练习小结

好好学习,珍爱生命,远离糟心新闻

  1. 打印当前Numpy版本
import numpy as np
print(np.__version__)
#1.18.0
  1. 构造一个全零的矩阵,并打印其占用的内存大小
yu_array = np.zeros((5,4))
print('%d bytes'%(yu_array.size * yu_array.itemsize))
#160 bytes
  1. 打印一个函数的帮助文档,比如numpy.add
print(help(np.info(np.add)))
  1. 创建一个10-49的数组,并将其倒序排列
yu_array = np.arange(10,50)
yu_array[::-1]
'''
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])
'''
  1. 找到一个数组中不为0的索引
yu_array = np.arange(5)
np.nonzero(yu_array)
#(array([1, 2, 3, 4]),)
  1. 随机构造一个3*3矩阵,并打印其中最大与最小值
yu_array = np.random.random((3,3))
yu_array.min()
yu_array.max()
#0.8304133210478898
  1. 构造一个5*5的矩阵,令其值都为1,并在最外层加上一圈0
#边界填充
yu_array = np.ones((5,5))
yu_array = np.pad(yu_array,pad_width=1, mode='constant',constant_values = 0)
yu_array
'''
array([[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.]])
'''
  1. 构建一个shape为(6,7,8)的矩阵,并找到第100个元素的索引值
np.unravel_index(100,(6,7,8))
#(1, 5, 4)
  1. 对一个5*5的矩阵做归一化操作
yu_array = np.random.random((5,5))
yu_max = yu_array.max()
yu_min = yu_array.min()
yu_array = (yu_array-yu_min)/(yu_max-yu_min)
yu_array
'''
array([[0.48397315, 0.91683086, 0.47196491, 1.        , 0.36369439],
       [0.93613393, 0.25536399, 0.92875343, 0.31834473, 0.59442395],
       [0.6512316 , 0.68949923, 0.70313301, 0.8288644 , 0.82369357],
       [0.27935272, 0.41088302, 0.78561219, 0.3246256 , 0.79369801],
       [0.21235418, 0.        , 0.13606257, 0.30524044, 0.22690585]])
'''
  1. 找到两个数组中相同的值
yu_array = np.random.randint(0,10,8)
xu_array = np.random.randint(0,10,8)
print(yu_array)
print(xu_array)
np.intersect1d(yu_array,xu_array)
'''
[1 7 6 7 1 7 1 9]
[9 9 1 6 3 3 8 3]
array([1, 6, 9])
'''
  1. 得到今天 明天 昨天的日期
today = np.datetime64('today','D')
yesterday  = np.datetime64('today','D')-np.timedelta64('1','D')
tommorow = np.datetime64('today','D')+np.timedelta64('1','D')
'''
numpy.datetime64('2020-01-31')
numpy.datetime64('2020-01-30')
numpy.datetime64('2020-02-01')
'''
  1. 得到一个月中所有的天
np.arange('2019-10','2019-11',dtype = 'datetime64[D]')
'''
array(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04',
       '2019-10-05', '2019-10-06', '2019-10-07', '2019-10-08',
       '2019-10-09', '2019-10-10', '2019-10-11', '2019-10-12',
       '2019-10-13', '2019-10-14', '2019-10-15', '2019-10-16',
       '2019-10-17', '2019-10-18', '2019-10-19', '2019-10-20',
       '2019-10-21', '2019-10-22', '2019-10-23', '2019-10-24',
       '2019-10-25', '2019-10-26', '2019-10-27', '2019-10-28',
       '2019-10-29', '2019-10-30', '2019-10-31'], dtype='datetime64[D]')
'''
  1. 得到一个数的整数部分
yu_array = np.random.uniform(0,10,10) 
np.floor(yu_array)
#array([6., 7., 2., 4., 4., 1., 1., 3., 6., 9.])
  1. 构造一个数组,让它不能被改变
yu_array = np.zeros(5)
yu_array.flags.writeable = False
yu_array[0] = 1
'''
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-18-6a8d2efcd9b8> in <module>
      1 yu_array = np.zeros(5)
      2 yu_array.flags.writeable = False
----> 3 yu_array[0] = 1

ValueError: assignment destination is read-only
'''
  1. 打印数据的部分值,全部值
import sys
np.set_printoptions(threshold=5) #打印部分
np.set_printoptions(threshold=sys.maxsize) #打印全部
yu_array = np.zeros((15,15))
yu_array
'''
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.]])
'''
  1. 找到在一个数组中,最接近一个数的索引
yu_array = np.arange(100)
xu_array = np.random.uniform(0,100) #指定一个随机数
print(xu_array)
index = (np.abs(yu_array-xu_array)).argmin()
print(yu_array[index])
'''
66.82479960861905
67
'''
  1. 32位float类型和32位int类型转换
yu_array = np.arange(10,dtype=np.int32)
yu_array = yu_array.astype(np.float32)
yu_array.dtype
#dtype('float32')
  1. 打印数组元素位置坐标与数值
yu_array = np.arange(9).reshape(3,3)
for index,value in np.ndenumerate(yu_array):
    print(index,value)
'''
(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
'''
  1. 按照数组的某一列进行排序
yu_array = np.random.randint(0,10,(3,3))
print(yu_array)
print(yu_array[yu_array[:,0].argsort()])#第一列
'''
[[5 4 4]
 [1 9 6]
 [9 6 9]]
[[1 9 6]
 [5 4 4]
 [9 6 9]]
'''
  1. 统计数组中每个数值出现的次数
yu_array = np.array([1,1,1,2,2,3,3,4,5,8])
np.bincount(yu_array)
#array([0, 3, 2, ..., 0, 0, 1]) 0出现0次,1出现3次
  1. 如何对一个四维数组的最后两维来求和
yu_array = np.random.randint(0,10,(4,4,4,4))
res = yu_array.sum(axis = (-2,-1))
res
'''
array([[58, 63, 85, 87],
       [81, 70, 64, 60],
       [64, 79, 76, 91],
       [63, 78, 66, 89]])
'''
  1. 交换矩阵中的两行和两列
yu_array = np.arange(25).reshape(5,5)
yu_array[:,[0,1]] = yu_array[:,[1,0]]#交换两列
yu_array[[0,1]] = yu_array[[1,0]]#交换两行
yu_array
'''
array([[ 1,  0,  2,  3,  4],
       [ 6,  5,  7,  8,  9],
       [11, 10, 12, 13, 14],
       [16, 15, 17, 18, 19],
       [21, 20, 22, 23, 24]])
'''
  1. 找到一个数组中最常出现的数字
yu_array = np.random.randint(0,10,5)
print(yu_array)
print(np.bincount(yu_array).argmax())
'''
[5 7 5 1 4]
5
'''
  1. 快速查找TOP K
yu_array = np.arange(5000)
np.random.shuffle(yu_array)
k = 5
print(yu_array[np.argpartition(-yu_array,k)[:k]]) 
#np.argpartition:很快的排序方法
#(-yu_array,k) 降序排列,最大的k个数排在最前面,k之后的乱序排列
#[4999 4998 4997 4996 4995]
  1. 去除掉一个数组中,所有元素都相同的数据
import sys
np.set_printoptions(threshold=sys.maxsize)
yu_array = np.random.randint(0,5,(10,3))
yu_array
'''
array([[3, 2, 3],
       [2, 2, 2],
       [0, 3, 2],
       [4, 3, 3],
       [0, 1, 4],
       [1, 0, 1],
       [4, 2, 1],
       [4, 4, 1],
       [1, 2, 4],
       [2, 1, 3]])
'''
m = np.all(yu_array[:,1:] == yu_array[:,:-1],axis = 1)
print(m)
#np.any 有一个相同就可以
#[False  True False False False False False False False False]
yu_array[~m]
'''
array([[3, 2, 3],
       [0, 3, 2],
       [4, 3, 3],
       [0, 1, 4],
       [1, 0, 1],
       [4, 2, 1],
       [4, 4, 1],
       [1, 2, 4],
       [2, 1, 3]])
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值