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

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
Z<Z>Z          #不合法

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')

你可能感兴趣的:(python学习)