ndarray数组 均为同类型数据
创建数组的方法arr1 = np.array([1,2,3,4,5]) # 构造方法 由列表转换为数组 [1 2 3 4 5] arr2 = np.array(range(0,10)) [0 1 2 3 4 5 6 7 8 9] arr3 = np.arange(10) # 内部功能函数 只能创建一维数组 [0 1 2 3 4 5 6 7 8 9] arr4 = np.arange(10,35,3) # 区分于range [10 13 16 19 22 25 28 31 34] arr5 = np.zeros((5,2)) # 任意维度 [[0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.]] arr6 = np.zeros(1) # 注意一维数组要加逗号 [0.] arr7 = np.empty((3,2)) # 随机 [[0.00000000e+00 3.85901628e-57] [6.58139982e-38 3.37996361e-57] [0.00000000e+00 0.00000000e+00]] arr8 = np.full((3,2),6) #(维度,填充内容) [[6 6] [6 6] [6 6]] arr9 = np.eye(3) # 创建单位矩阵 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] arr10 = np.random.random((2,3)) # random [[0.64437913 0.9991426 0.72643201] [0.48119623 0.23374243 0.87856805]]向量
只有一列的数组
vec1 = np.array([[2],[1],[3]]) [[2] [1] [3]] vec2 = np.array([[1,2,3]]) [[1 2 3]] ec2.shape # 获取数组形状 (1, 3) vec3 = vec2.T # 属性 转置 [[1] [2] [3]] vec3.shape (3, 1) vec4 = np.transpose(np.array(vec2)) # 函数 转置 [[1] [2] [3]] vec5 = np.array([[[1]]]) # 几个方括号就是几维数组 vec5.shape (1, 1, 1)数据类型
# dtype 属性 x = np.array([1,2,3], dtype = float) # 指定类型 print(x.dtype) float64 y = x.astype(int) # 强制类型转换 print(y.dtype) int64数据形状
a = np.random.random((3,4))
print(a)
[[0.52657856 0.67840272 0.30837733 0.3467796 ]
[0.61453058 0.46593445 0.22989515 0.26439116]
[0.68405527 0.19711851 0.62534821 0.14745157]]
print(a.ravel()) # ravel()函数转换为一维数组 从左往右 从上到下
[0.52657856 0.67840272 0.30837733 0.3467796 0.61453058 0.46593445
0.22989515 0.26439116 0.68405527 0.19711851 0.62534821 0.14745157]
print(a.ravel('F')) # 从上到下 从左往右 a的转置
[0.52657856 0.61453058 0.68405527 0.67840272 0.46593445 0.19711851
0.30837733 0.22989515 0.62534821 0.3467796 0.26439116 0.14745157]
print(a.reshape(6,2)) # 强制改变形状得到新数组
[[0.52657856 0.67840272]
[0.30837733 0.3467796 ]
[0.61453058 0.46593445]
[0.22989515 0.26439116]
[0.68405527 0.19711851]
[0.62534821 0.14745157]]
print(a.reshape(6,-1)) # -1自动计算
[[0.52657856 0.67840272]
[0.30837733 0.3467796 ]
[0.61453058 0.46593445]
[0.22989515 0.26439116]
[0.68405527 0.19711851]
[0.62534821 0.14745157]]
a.reshape(6,2) # 新对象 不会改变a
print(a.T) # 转置
[[0.52657856 0.61453058 0.68405527]
[0.67840272 0.46593445 0.19711851]
[0.30837733 0.22989515 0.62534821]
[0.3467796 0.26439116 0.14745157]]
a.resize(6,2) # 改变原数组
print(a)
[[0.52657856 0.67840272]
[0.30837733 0.3467796 ]
[0.61453058 0.46593445]
[0.22989515 0.26439116]
[0.68405527 0.19711851]
[0.62534821 0.14745157]]
运算
m = np.array([[1,2],[3,4]],dtype = np.float64) n = np.array([[5,6],[7,8]],dtype = np.float64) print(m + n) print(np.add(m,n)) [[ 6. 8.] [10. 12.]] print(m * n) # 对应元素相乘 print(np.multiply(m,n)) [[ 5. 12.] [21. 32.]] print(m.dot(n)) # 矩阵乘法 [[19. 22.] [43. 50.]]索引
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) b = np.array([0,2,0,1]) print(a[np.arange(4),b]) # b不是切片 [ 1 6 7 11] print(a[:2,1:3]) # 每个维都要指定一个切片 [[2 3] [5 6]] c = np.arange(0,6).reshape(3,2) d = (c > 2) # d为布尔数组 print(c[b]) [[0 1] [4 5] [0 1] [2 3]] print(c[(c>2) & (c<4)]) # 用位运算符 [3] print(c[np.where(c >= 2)]) # where()函数根据条件返回数组中的值 array([0, 1, 0, 1])) [2 3 4 5]赋值、视图与拷贝
a = np.arange(6) b = a b[1] = 9 print(b) # python变量 [0 9 2 3 4 5] c = a.view() c[0] = 9 c.resize(2,3) print(a.shape) # 创建新对象 (6,) print(a) # 与原数组共享数据 [9 9 2 3 4 5] # copy() 方法生成数组及其数据的完整副本练习——计算三元一次方程组
有关numpy线性运算
a = np.array([[1,-2,1],[0,2,-8],[-4,5,9]]) b = np.array([[0],[8],[-9]]) # 方法一 A = np.matrix(a) # 转换为矩阵 B = np.matrix(b) A_I = A.I # 求逆矩阵 X = A_I * B # 方法二 a_i = np.linalg.inv(a) x = a_i.dot(b) # 方法三 X = np.linalg.solve(A,B) x = np.linalg.solve(a,b) # 这样也可以



