代码语言:javascript复制这个100题系列来源于
github上
的题目,分为4
天完成,主要介绍的是numpy
的常见操作。
# 导入numpy包
import numpy as np
代码语言:javascript复制# 查看版本
print(np.__version__)
代码语言:javascript复制1.16.3
代码语言:javascript复制# 创造全0矩阵
Z = np.zeros((5,5))
Z
代码语言:javascript复制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.]])
代码语言:javascript复制# 查看数组内存大小
Z = np.zeros((5,5))
print("%d bytes" % (Z.size * Z.itemsize))
代码语言:javascript复制200 bytes
代码语言:javascript复制Z.itemsize
代码语言:javascript复制8
代码语言:javascript复制# 修改数组指定位置的值
Z = np.zeros(10)
Z[4] = 5
Z
代码语言:javascript复制array([0., 0., 0., 0., 5., 0., 0., 0., 0., 0.])
代码语言:javascript复制# 如何反转数组
Z = np.arange(10,21)
Z = Z[::-1] # 实现反转功能
Z
代码语言:javascript复制array([20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10])
代码语言:javascript复制# 改变数组形状
Z = np.arange(9).reshape(3,3)
Z
代码语言:javascript复制array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
代码语言:javascript复制# 创建非0数组:自动将数组中的0去掉
nz = np.nonzero([1,2,0,0,4,0])
nz
代码语言:javascript复制(array([0, 1, 4], dtype=int64),)
代码语言:javascript复制# 创建单位矩阵
Z = np.eye(3)
Z
代码语言:javascript复制array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
代码语言:javascript复制# 找出数组中的最大和最小值
Z = np.random.random((10,10)) # random生成的是0-1之间的数
Zmin, Zmax = Z.min(), Z.max() # 找出最小和最大值
print(Zmin, Zmax)
代码语言:javascript复制0.00804609668099976 0.9958444566621576
代码语言:javascript复制 # 求平均值
z = np.random.random(30)
m = z.mean()
m
代码语言:javascript复制0.5543031427314672
代码语言:javascript复制# 行中的索引为1到索引为-2(含头不含尾),列同样,赋值为0
z = np.ones((10,10))
z[1:-1, 1:-1] = 0 # 行和列的指定位置同时赋值为0
z
代码语言:javascript复制array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
代码语言:javascript复制# 数组外围的填充
Z = np.ones((5,5)) # 全1矩阵
# 将5*5变成7*7的矩阵,外围填充的数字是0,模式是常量
Z = np.pad(Z, pad_width=2, mode='constant', constant_values=0)
Z
代码语言:javascript复制array([[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.]])
代码语言:javascript复制# nan的神器之处
print(0 * np.nan) # nan
print(np.nan == np.nan) # F
print(np.inf > np.nan) # F
print(np.nan - np.nan) # nan
print(np.nan in set([np.nan])) # T
print(0.3 == 3 * 0.1) # F
代码语言:javascript复制nan
False
False
nan
True
False
代码语言:javascript复制Z = np.diag(1 np.arange(4),k=1)
print(Z)
代码语言:javascript复制[[0 1 0 0 0]
[0 0 2 0 0]
[0 0 0 3 0]
[0 0 0 0 4]
[0 0 0 0 0]]
代码语言:javascript复制Z = np.diag(1 np.arange(4),k=-1) # 观察k值的变化
print(Z)
代码语言:javascript复制[[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]]
代码语言:javascript复制Z = np.diag(1 np.arange(4),k=-2)
print(Z)
代码语言:javascript复制[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[1 0 0 0 0 0]
[0 2 0 0 0 0]
[0 0 3 0 0 0]
[0 0 0 4 0 0]]
代码语言:javascript复制Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
print(Z)
代码语言:javascript复制[[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]]
代码语言:javascript复制print(np.unravel_index(99,(6,7,8)))
代码语言:javascript复制(1, 5, 3)
代码语言:javascript复制Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
print(Z)
代码语言:javascript复制[[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]]
代码语言:javascript复制Z = np.random.random((5,5))
Z = (Z - np.mean (Z)) / (np.std (Z)) # 标准分布
print(Z)
代码语言:javascript复制[[ 1.41352327 -1.10568196 0.42998927 -1.13603058 1.6252364 ]
[-1.38790781 -0.38326045 -0.48561531 -0.91306084 0.99511305]
[-0.95801467 0.72817058 0.42855968 0.40835484 1.69929003]
[ 0.36861659 0.05906306 -1.31997441 -0.92392559 1.00674601]
[ 0.69583865 -0.71638163 -1.14414993 -0.83217088 1.44767262]]
代码语言:javascript复制# 数组的点乘
Z = np.dot(np.ones((5,3)), np.ones((3,2))) # dot表示点乘
print(Z)
print("-----------")
# Alternative solution, in Python 3.5 and above
Z = np.ones((5,3)) @ np.ones((3,2))
print(Z)
代码语言:javascript复制[[3. 3.]
[3. 3.]
[3. 3.]
[3. 3.]
[3. 3.]]
-----------
[[3. 3.]
[3. 3.]
[3. 3.]
[3. 3.]
[3. 3.]]
代码语言:javascript复制# 条件表达式的使用
Z = np.arange(11)
Z[(3 < Z) & (Z <= 8)] *= -1
print(Z)
代码语言:javascript复制[ 0 1 2 3 -4 -5 -6 -7 -8 9 10]
代码语言:javascript复制Z = np.arange(11)
Z[(3 < Z)] = 10 # 将大于3的赋值为10
print(Z)
代码语言:javascript复制[ 0 1 2 3 10 10 10 10 10 10 10]