Numpy是个较大的知识块,细讲三天三夜都不一定说的完。这里我会简单罗列出一些基础的知识点,并配上相应的例子以供大家理解。
将下列矩阵输入成ndarray,记为arr1_1
1 3 5
4 2 7
2 1 8
arr1_1 = np.array([[1,3,5],[4,2,7],[2,1,8]])
最外层有几个中括号就是几维
查看arr1的维度
arr1_1.ndim
>>> 2
查看arr1_1的形状
arr1_1.shape
>>> (3,3)
查看arr1_1的数据类型
arr1_1.dtype
>>> dtype('int32')
创建从0到14这15个整数构成的一维数组,将它调整形状为(3,5),记为arr1_2
arr1_2 = np.arange(15).reshape((3,5))
>>> array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
与np.zeros()相同
创建形状为(2,4)的每个元素都为1的数组arr1_3
arr1_3 = np.ones((2,4))
其中 num:采样数, dim:n维
创建与arr1_2数组一样形状的满足标准正态分布的数组arr1_4
m,n = arr1_2.shape
arr1_4 = np.random.randn(m,n)
>>> array([[-0.31416073, -0.26025905, -0.54291357, 0.0288242 , -0.75148283],
[ 1.11104542, -0.52550434, 0.7124409 , 0.50739168, -0.7176994 ],
[ 0.51240116, 1.30424139, -1.73727389, 1.54419445, -2.76840111]])
将arr1_2的每个元素增加1,生成arr2_1
# 法一:
arr2_1 = arr1_2 + 1
# 法二:
arr2_1 = [x+1 for x in arr1_2]
>>> array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
将arr1_2和arr1_4对应元素相乘,生成arr2_2
# 法一:
arr2_2 = arr1_3 * arr1_5
# 法二:
arr2_2 = np.multiply(arr1_3,arr1_5)
>>> array([[ -0. , -0.26025905, -1.08582714, 0.08647261,
-3.00593131],
[ 5.55522712, -3.15302606, 4.9870863 , 4.05913347,
-6.45929462],
[ 5.12401156, 14.34665525, -20.84728669, 20.07452781,
-38.7576156 ]])
eg:以e为底,arr1_1的每个元素为指数,生成新的数组arr2_3
# 法一:
arr2_3 = np.exp(arr1_1)
# 法二:
arr2_3 = math.e**arr1_1
>>> array([[2.71828183e+00, 2.00855369e+01, 2.00855369e+01],
[5.45981500e+01, 7.38905610e+00, 2.71828183e+00],
[7.38905610e+00, 1.09663316e+03, 2.98095799e+03]])
# 行索引为0
arr1_2[0,]
>>> array([0, 1, 2, 3, 4])
# 行索引为1的元素更改为5
arr1_2[1] = 5
>>> array([[ 0, 1, 2, 3, 4],
[ 5, 5, 5, 5, 5],
[10, 11, 12, 13, 14]])
# 列索引为3
arr1_3[:,3]
>>> array([ 3, 8, 13])
# 行列索引为(0,3)
arr1_3[0,3]
>>> 3
# 行索引为0,列索引为[1,2]
arr1_3[0,[1,2]]
>>> array([1, 2])
# 行索引为[0,1],列索引为[2,3]的二维数组
arr1_3[[0,1]] [:,[2,3]]
>>> array([[2, 3],
[7, 8]])
arr中 大于10 或 小于3 的元素
arr1_3[arr1_3>10 | ar1_3r<3] # | -> 或
>>> array([ 0, 1, 2, 11, 12, 13, 14])
# 行索引为[0,1],列索引为[2,3]的二维数组
arr1_3[:2,2:4] # 基础索引
arr1_3[[0,1]][:,[2,3]] # 神奇索引
>>> array([[2, 3],
[7, 8]])
# 同时输出 第0行第2列 和 第1行第3列 的元素构成的一维数组
arr1_3[[0,1],[2,3]]
>>> array([2, 8])
np.where(表达式,结果1,结果2)
arr1_3中 大于10的取做10, 小于10的保留,记为arr4_1
arr4_1 = np.where(arr1_3>10,10,arr1_3)
>>> array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 10, 10, 10, 10]])
按行:axis=1(不同列)
按列:axis=0(不同行)
将arr1_3的每列求平均
arr1_3.mean(axis=0)
>>> array([5., 6., 7., 8., 9.])
按行:axis=1(不同列)
按列:axis=0(不同行)
沿着列的方向求累积
arr1_3.comprod(axis=0)
>>> array([[ 0, 1, 2, 3, 4],
[ 0, 6, 14, 24, 36],
[ 0, 66, 168, 312, 504]], dtype=int32)
按行排序:axis=1(不同列)
按列排序:axis=0(不同行)
将arr1_4按列排序
np.sort(arr1_4,axis=0)
>>> array([[-0.31416073, -0.52550434, -1.73727389, 0.0288242 , -2.76840111],
[ 0.51240116, -0.26025905, -0.54291357, 0.50739168, -0.75148283],
[ 1.11104542, 1.30424139, 0.7124409 , 1.54419445, -0.7176994 ]])
判断arr4_1是否每个元素都大于9
(arr4_1>9).all()
>>> False
判断arr4_1是否有元素大于9
(arr4_1>9).any()
>>> True
以上就是我日常实验整理出来的一些基本的Numpy知识点(不完全),如有错误,还请各位大佬多多指点。