Numpy-100练习题(★☆☆)

刷题~~ 刷题 ~~
原题地址https://github.com/rougier/numpy-100
1.导入numpy并命名为np

import numpy as np

2.打印numpy的版本和配置
print(np.__version__) np.show_config()

3.创建一个大小为10的0向量
np.zeros(10)

4.查看数组的内存大小
a = np.zeros(10) a.size#查看数组有多少个元素 a.itemsize#查看每个元素占了多少个字节 a.nbytes#查看数组一共占了多少内存,等同于a.size*a.itemsize

【Numpy-100练习题(★☆☆)】5.如何获取numpy中的add函数的文档
np.info(np.add)

6.创建一个大小为10的0向量,但第五个值为1
a = np.zeros(10) a[4] = 1

7.创建有I个10-49的数组
np.arange(10,50)

8.翻转一个向量(第一个元素变为最后一个)
a = np.arange(1,11) a = a[::-1]

9.创建一个3×3矩阵,值在0-8之间
#方法一 a = np.arange(9) a.shape = 3,3#方法二 a = np.arange(9).reshape(3,3)

10.找出[1,2,0,0,4,0]中的非零元素的索引
np.nonzero([1,2,0,0,4,0])

11.创建一个3×3的单位矩阵
np.eye(3)

12.随机创建一个3×3×3的数组
np.random.random((3,3,3))

13.随机创建一个10×10的数组,并找出最大最小值
a = np.random.random((10,10)) a.max() a.min()

14.创建一个大小为30的随机向量,并求其平均值
a = np.random.random(30) a.mean()

15.创建一个二维数组,外边框为1,内部为0
#方法一 a = np.ones((10,10)) a = a[1:-1,1:-1] = 0#方法二 a = np.zeros((8,8)) a = np.pad(a,pad_width = 1,mode = 'constant',constant_values = 1)

16.在现有的矩阵列周围添加一圈0
a = np.ones((5,5)) a = np.pad(a,pad_width = 1,mode = 'constant',constant_values = 0)

17.下面式子的输出结果
print(0*np.nan)# nan print(np.nan == np.nan)# False print(np.inf > np.nan)# False print(np.nan - np.nan)# nan print(np.nan in set([np.nan]))# True print(0.3 == 3*0.1)# Flase

18.创建一个5×5的矩阵,对角线的下方值对应为1,2,3,4
a = np.diag(np.arange(1,6),k =-1) # k为偏移量,k=-1表示在斜对角线的下方第一列,k=1表示在斜对角线的上方第一列,k=0表示无偏移

19.创建一个8×8的矩阵,棋盘式填充
a = np.zeros((8,8),dtype=int) a[1::2,::2] = 1 a[::2,1::2] = 1

20.形状为(6,7,8)的数组第100的元素的索引(x,y,z)是什么
np.unravel_index(100,(6,7,8))

21.使用tile创建一个8×8的棋盘格矩阵
np.tile([[0,1],[1,0]],[4,4])

函数格式tile(A,reps)
A和reps都是array_like
A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以,bool。
reps的类型也很多,可以是tuple,list, dict, array, int, bool.但不可以是float, string, matrix类型。
22.随机生成5×5的归一化矩阵
a= np.random.random((5,5)) a = (a-np.mean(a))/(np.std(a))

23.创建一个自定义字符类型,将颜色描述为四个无符号字节(RGBA)
color = np.dtype([("r", np.ubyte, 1), ("g", np.ubyte, 1), ("b", np.ubyte, 1), ("a", np.ubyte, 1)])

24.将5×3矩阵乘以3×2矩阵
a = np.ones((5,3)) b = np.ones((3,2)) #方法一 a.dot(b) #方法二 np.dot(a,b)

25.给定一维数组,其中元素的大小在3到8之间的取负数
a = np.arange(1,12) a[(a>3)&(a<8)] *= -1

26.下面命令输出的结果是?
print(sum(range(5),-1))# 输出9 from numpy import * print(sum(range(5),-1))# 输出10

python自带sum
输入是个可迭代的。可以是列表,数组,可迭代对象。
sum最多有两个参数,第一个参数是可迭代的。当有两个参数时,第二个参数只能是个数。
sum(iterable, start)=可迭代的所有相加和+start值
numpy中的sum
输入可以是列表,元组,数组。
对于数组可以指定维度进行相加。默认为axis=none。
sum(a,axis)
axis = 0 —— 纵向
axis = 1 —— 横向
axis = -1 —— 最高维度
27.下列式子中哪些是合法的?
Z**Z 2 << Z >> 2 Z <- Z 1j*Z Z/1/1 ZZ#不合法

28.下面命令输出的结果是?
print(np.array(0) / np.array(0))# nan print(np.array(0) // np.array(0))# 0 print(np.array([np.nan]).astype(int).astype(float))#[-2.14748365e+09]

29.数组的四舍五入
Z = np.random.uniform(-10,+10,10) print (np.copysign(np.ceil(np.abs(Z)), Z))

np.copysign(ndarray, ndarray) 将参数2中的符号赋予参数1
30.找出两个数组之间的相同值
a1 = np.random.randint(0,10,10) a2 = np.random.randint(0,10,10) print(np.intersect1d(a1,a2))

函数 说明
np.intersect1d( ndarray1, ndarray2) 返回二者的交集并排序
np.union1d( ndarray1, ndarray2) 返回二者的并集并排序
np.setdiff1d( ndarray1, ndarray2) 返回二者的差
np.setxor1d( ndarray1, ndarray2) 返回二者的对称差
31.如何忽略所有numpy警告(不推荐)
defaults = np.seterr(all="ignore")

32.下面的表达式正确吗?
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')

    推荐阅读