简述:在之前几篇的分享中,我们了解了NumPy的一些基础使用。本次为掌握NumPy的更多用法和提升熟悉程度,本篇列举了33个初级题目进行练习,配有代码。后续还会有中级和高级题目。
1.导入numpy模块,设置别称为np
import numpy as np
复制
2.显示numpy的版本号和配置文件
复制
3.创建一个大小为10的空向量
复制
4.查看数组占用内存大小
cx_1 = np.empty((3,2),np.uint32)
cx_2 = np.empty((3,2),np.float16)
print(cx_1.itemsize * cx_2.size) #itemsize表示数组中每一个元素所占空间的大小
print(cx_2.itemsize * cx_1.size) #size返回值表示数组的大小
复制
5.查看numpy中add函数的用法
print(np.info(np.add)) #也可使用info()查看numpy中其他函数的用法
复制
6.创建一个大小为10的空向量,将第5个值设为1
cx = np.zeros(10) #使用zeros()函数创建空向量
复制
7.用10到49的序列构建一个向量
复制
8.将一个数组变换倒序(最后一个元素成为第一个元素)
cl = cx[::-1] #使用切片方法并使用-1进行倒序
复制
9.用0-8这9个数构造一个3x3大小的矩阵
cx = np.arange(0,9).reshape(3,3)
复制
10.从数组[1,2,0,0,4,0]中找出非0元素的下标
复制
11.创建3x3的对角矩阵
print(np.identity(3)) #identity()只能创建行列相等的矩阵,对角线上为1,其余元素为0
print(np.eye(3,3,0)) #eye()可自定义矩阵行列和对角线位置
复制
12.用随机数创建一个3x3x3的矩阵
print(np.random.random((3,3,3))) #使用random()传入矩阵大小
复制
13.创建一个10x10的随机数矩阵,并找到最大值和最小值
cx = np.random.random((10,10))
print(cx,cx.max(),cx.min()) #使用max()、min()找到
复制
14.创建一个大小为30的数组,并计算其算术平均值
cx = np.random.random((30))
print(cx,cx.mean()) #使用mean()求得
复制
15.创建一个二维数组,边为1,其余为0
cx[1:-1,1:-1] = 0 #切片改变矩阵四边的元素值
复制
16.扩展给定数组的边界
print(np.pad(cx,2,mode='constant',constant_values=0)) #使用pad()进行扩展
复制
17.指出下列表达式的结果是什么?
print(0 * np.nan) #nan 有nan参与的运算,其结果也一定是nan
print(np.nan == np.nan) #False nan不是数,所以无法进行比较运算
print(np.nan in set([np.nan])) #True nan在nan的字典中
print(0.3 == 3 * 0.1) #False 浮点数可以比大小,但相等要用math.isclose比较
print(math.isclose(0.3, 3 * 0.1)) #True
复制
18.用1,2,3,4做为对角线的下移一行,来创建5x5的矩阵
cx = np.diag([1,2,3,4],-1)
复制
19.创建一个类似国际象棋棋盘的8x8的矩阵
cx[1::2,1::2] = 1 #切片改变不同位置的值
复制
20.对一个6x7x8的数组,找出第100个元素的下标
print(np.unravel_index(100,(6,7,8))) #向unravel_index()传入要找元素的第x个和矩阵形状
复制
21.使用tile函数创建一个棋盘
print(np.tile([[0, 1], [1, 0]], (4, 4))) #tile()将传入的第一个参数当作一个元素,再次创建
复制
22.归一化一个5x5的随机矩阵
cx = np.random.random((5,5))*10
print(cx - cx.mean() / cx.std()) #使用值减去平均值,再除以标准偏差的方法归一
复制
23.自定义一个用 unsigned bytes 表示RGBA颜色的dtype类型
print(np.dtype([('R', np.ubyte), ('G', np.ubyte), ('B', np.ubyte), ('A', np.ubyte)]))
复制
24.计算5x3和3x2矩阵的内积(点乘)
cx_1 = np.random.randint(0,9,(5,3))
cx_2 = np.random.randint(0,9,(3,2))
print(np.dot(cx_1,cx_2)) #使用dot()计算两个矩阵的内积
复制
25.把一维数组中大于3小于8的所有元素变成对应负数
cx[(cx > 3) & (cx<8)] *= -1 #并行条件找到并修改元素值
复制
26.指出下列程序的输出?
复制
27.对于整数向量,下面的哪些表达式是合法的?
print(2 << cx >> 2) # False
print(cx <- cx) # True
print(cx<cx>cx) # False
复制
28.下面的表达式的结果是?
print(np.array(0) / np.array(0))
print(np.array([np.nan]).astype(int).astype(float))
复制
29.对于浮点数数组取整?
cx = np.random.uniform(-10,+10,10) #创建值在(-10,+10)的10个元素的数组
print(np.copysign(np.ceil(np.abs(cx)),cx)) #abs()将所以元素取正;ceil()将所以元素取整;copysign()根据原数组改变当前数组的正负值
复制
30.查找两个数组的交集?
cx_1 = np.random.randint(0,10,10)
cx_2 = np.random.randint(0,10,10)
print(np.intersect1d(cx_1,cx_2)) #intersect1d()比较两个矩阵,找到交集
复制
31.忽略numpy的警告?
defaults = np.seterr(all="ignore") #忽略所有警告
复制
32.下列表达式结果为真么?
print(np.sqrt(-1) == np.emath.sqrt(-1)) # False
复制
33.获取今天,昨天,明天的日期?
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,today,tomorrow)
复制
总结:以上是本篇NumPy的初级使用,更多复杂的操作也可以通过多个简单的操作组合完成,欢迎大家尝试或者补充更好的方法。中级篇和高级篇正在准备中,还请期待~