Numpy 100 题(01)
-
翻译自【100 Numpy exercises】
-
1、导入numpy 模块
import numpy as np
- 2、显示numpy版本信息和配置信息
print(np.__version__)
print(np.show_config)
1.15.4
<function show at 0x0000020E6D935048>
- 3、创建一个长度为10的向量
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
- 4、查看数组的所占内存大小
Z = np.zeros((10,10))
print(Z.size)
print(Z.itemsize)
print("占用内存 %d 字节"%(Z.size * Z.itemsize))
100
8
占用内存 800 字节
- 5、获取numpy中的add()函数的文档说明
# np.info(np.add) 显示内容过多,因此注释掉了
- 6、创建一个长度为10的数组,除了第5个元素为1,其余为0
Z = np.zeros(10)
Z[4] = 1
Z
array([0., 0., 0., 0., 1., 0., 0., 0., 0., 0.])
- 7、创建一个数组,元素内容为10-49之间的整数
np.arange(10,50)
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49])
- 8、反转数组
Z = np.arange(10)
print(Z)
Z = Z[::-1]
print(Z)
[0 1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
- 9、创建一个元素为0-8的3*3的矩阵
np.arange(9).reshape((3,3))
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
- 10、从一个已知数组中找到非零元素的索引
Z = np.nonzero([1,2,0,0,4,0])
Z
(array([0, 1, 4], dtype=int64),)
- 10.1、从一个数组中找出非零元素
Z = np.array([1,2,0,0,4,0])
Z[Z!=0]
array([1, 2, 4])
- 11、创建一个3*3的单位矩阵
np.eye(3,3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
- 12、创建一个333的随机矩阵
np.random.random((3,3,3))
array([[[0.37012557, 0.58629246, 0.63469257],
[0.07624521, 0.7364043 , 0.49991276],
[0.22619947, 0.79636025, 0.13946926]],
[[0.01292098, 0.05088407, 0.6725912 ],
[0.22836428, 0.26632302, 0.28000895],
[0.07163848, 0.97799436, 0.42490585]],
[[0.50347816, 0.2865657 , 0.68199042],
[0.4922003 , 0.13419313, 0.4132367 ],
[0.9027708 , 0.47907502, 0.80020785]]])
- 13、创建一个10*10的随机矩阵,并查找其中的最大值和最小值
Z = np.random.random((10,10))
print(Z.min(), Z.max())
0.011754766652203097 0.9907146373493055
- 14、创建一个长度为30的数组并求其均值
Z = np.random.random(30)
Z.mean()
0.4629062578787529
- 15、创建一个10*10数组,外面为1,内层为0
Z = np.ones((5,5))
Z[1:-1,1:-1] = 0
Z
array([[1., 1., 1., 1., 1.],
[1., 0., 0., 0., 1.],
[1., 0., 0., 0., 1.],
[1., 0., 0., 0., 1.],
[1., 1., 1., 1., 1.]])
- 16、如何给已知的数组使用某个数(比如0)填充边界?
Z = np.ones((5,5))
np.pad(Z, pad_width=1,mode='constant',constant_values=0)
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.]])
- 17、下面的结果是什么?
print(0*np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(np.nan in set([np.nan]))
print(0.3 == 3*0.1)
nan
False
False
nan
True
False
3*0.1
0.30000000000000004
- 18、使用1,2,3,4创建一个5*5的下三角矩阵
np.diag(np.arange(1,5),k=-1)# k=1对角线上方为1-4,k=0对角线为1-4
array([[0, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 2, 0, 0, 0],
[0, 0, 3, 0, 0],
[0, 0, 0, 4, 0]])
- 19、创建一个8*8的棋盘模式的矩阵
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
Z
array([[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0]])
- 20、对于一个6 * 7 * 8的数组,第100个元素的索引是多少?
print(np.unravel_index(100,(6,7,8)))
(1, 5, 4)
- 21、使用tile函数创建棋盘格8x8矩阵
np.tile(np.array([[0,1],[1,0]]),(4,4))
array([[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0]])
- 22、归一化一个5 * 5的随机矩阵
np.random.normal(np.random.random((5,5)))
array([[ 2.60849853, 0.31874995, 0.64675949, -0.73555684, 0.8113693 ],
[-0.39506835, -1.1498409 , 0.02358563, 0.39965941, -0.64782367],
[ 2.19659838, 0.75566756, -0.02041239, -0.69997971, -0.74525086],
[ 0.6928399 , -0.85761756, 1.73544746, 0.86835734, 0.72045554],
[ 1.41462803, 0.40143413, 1.59049199, 1.64649693, 0.94731539]])
Z = np.random.random((5,5))
Z = (Z - Z.mean())/(np.std(Z))
Z
array([[ 1.74587543, -0.46466548, -0.23803106, -0.64728251, 1.07947335],
[-0.65515525, 0.47001418, -0.67270887, 0.40757181, 0.0523071 ],
[ 1.75866604, -1.23064294, 1.71929603, -1.67534284, -0.14622862],
[ 1.73525806, 0.09939137, -1.67251594, -1.23570368, 0.38072644],
[-0.51723689, 0.26364351, -0.64551786, 0.34784446, -0.25903583]])
- 23、创建一个自定义dtype,将颜色描述为四个无符号字节(RGBA)
color = np.dtype([('r',np.ubyte,1), ('g',np.ubyte,1), ('b',np.ubyte,1), ('a',np.ubyte,1),])
color
dtype([('r', 'u1'), ('g', 'u1'), ('b', 'u1'), ('a', 'u1')])
- 24、矩阵相乘
np.dot(np.ones((4,3)), np.ones((3,2)))
array([[3., 3.],
[3., 3.],
[3., 3.],
[3., 3.]])
- 25、给定一个数组,原地否定所有3-8之间的元素
Z = np.arange(11)
Z[(Z>3)&(Z<8)] *= -1
Z
array([ 0, 1, 2, 3, -4, -5, -6, -7, 8, 9, 10])
- 26、下面的输出是什么?具体解释
print(sum(range(5),-1))
9
from numpy import *
print(sum(range(5),-1))
10
- 27、对于一个整数数组,下面哪个是合法的?
Z = np.arange(5)
Z**Z
array([ 1, 1, 4, 27, 256], dtype=int32)
2<<Z>>2
array([0, 1, 2, 4, 8], dtype=int32)
Z<-Z
array([False, False, False, False, False])
1j*Z
array([0.+0.j, 0.+1.j, 0.+2.j, 0.+3.j, 0.+4.j])
Z/1/1
array([0., 1., 2., 3., 4.])
Z<Z>Z
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-112-6d2bd9eb1fd1> in <module>
----> 1 Z<Z>Z
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Z>>2
array([0, 0, 0, 0, 1], dtype=int32)
Z<<2
array([ 0, 4, 8, 12, 16], dtype=int32)
- 28、下面得结果是什么?
print(np.array(0)/np.array(0))
print(np.array(0)//np.array(0))
print(np.array([np.nan]).astype(int).astype(float))
nan
0
[-2.14748365e+09]
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide
"""Entry point for launching an IPython kernel.
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in floor_divide
- 29、How to round away from zero a float array?
Z = np.random.uniform(-10,+10,10)
print (np.copysign(np.ceil(np.abs(Z)), Z))
[-3. 4. -2. -7. -6. 2. -4. -7. 10. 1.]
print (Z)
print(np.ceil(Z))
[-2.20110087 3.00916651 -1.69460284 -6.60836919 -5.81308119 1.31549905
-3.75580551 -6.00466297 9.57310303 0.30092061]
[-2. 4. -1. -6. -5. 2. -3. -6. 10. 1.]
- 30、找出两个数组中的相同值
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))
[0 6 9]
Z1
array([1, 5, 2, 6, 9, 2, 5, 0, 1, 3])
Z2
array([7, 4, 6, 0, 7, 7, 7, 9, 6, 8])