Numpy常用矩阵操作知识点(部分)

import numpy as np

生成np.array对象

a = np.array([1,2,3])  #此时a为一维数组
print(type(a))
a
<class 'numpy.ndarray'>
array([1, 2, 3])
a1 = np.array([[1],[2],[3]])
a1
array([[1],
       [2],
       [3]])
b = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])
print(b)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
print(b[0])
[1 2 3]
print(b[0][0])
1

sum函数

b.sum() #对每个元素求和
45
b.sum(axis=0) #计算每一列元素的和
array([12, 15, 18])
b.sum(axis=1) #计算每一行元素的和
array([ 6, 15, 24])

提取矩阵中指定位置的元素

b[0:2]
array([[1, 2, 3],
       [4, 5, 6]])
A = np.array([[1, 1, 4, 1/3, 3],
              [1,1, 4, 1/3, 3],
              [1/4, 1/4, 1, 1/3, 1/2],
              [3, 3, 3, 1, 3],
              [1/3, 1/3, 2, 1/3, 1]])
A[0,0] #第一行第一列元素
1.0
A[1,:]  #第二行的所有元素
array([1.        , 1.        , 4.        , 0.33333333, 3.        ])
A[3,:]  #第四行的所有元素
array([3., 3., 3., 1., 3.])
A[:,0]  #第一行的所有元素
array([1.        , 1.        , 0.25      , 3.        , 0.33333333])
A[[1,3],:]  #取1,3行
array([[1.        , 1.        , 4.        , 0.33333333, 3.        ],
       [3.        , 3.        , 3.        , 1.        , 3.        ]])
A[:,[0,2]]  #取1,3列
array([[1.        , 4.        ],
       [1.        , 4.        ],
       [0.25      , 1.        ],
       [3.        , 3.        ],
       [0.33333333, 2.        ]])
A[0:4:2,:]  #在前4行中隔一行取一个
array([[1.        , 1.        , 4.        , 0.33333333, 3.        ],
       [0.25      , 0.25      , 1.        , 0.33333333, 0.5       ]])
A[:,1:4:3]  #隔两列取一个
array([[1.        ],
       [1.        ],
       [0.25      ],
       [3.        ],
       [0.33333333]])
A
array([[1.        , 1.        , 4.        , 0.33333333, 3.        ],
       [1.        , 1.        , 4.        , 0.33333333, 3.        ],
       [0.25      , 0.25      , 1.        , 0.33333333, 0.5       ],
       [3.        , 3.        , 3.        , 1.        , 3.        ],
       [0.33333333, 0.33333333, 2.        , 0.33333333, 1.        ]])

shape函数

A.shape  #返回矩阵A的大小,先行后列
(5, 5)
type(np.shape(A))
tuple
(d,e) = A.shape  #用一个元组接收行列
print(d,e)
5 5
C = np.array([[1,2,5],
              [2,3,5],
              [3,4,5],
              [2,3,6]])
C.shape
(4, 3)
C.shape[0]  #只返回行数
4
C.shape[1]  #返回列数
3

tile函数(复制平铺)

np.tile(C,2)  #将整体C看作一个个体,平铺成一行两列,等价于np.tile(C,(1,2))
array([[1, 2, 5, 1, 2, 5],
       [2, 3, 5, 2, 3, 5],
       [3, 4, 5, 3, 4, 5],
       [2, 3, 6, 2, 3, 6]])
np.tile(C,(2,1))  #平铺成两行一列
array([[1, 2, 5],
       [2, 3, 5],
       [3, 4, 5],
       [2, 3, 6],
       [1, 2, 5],
       [2, 3, 5],
       [3, 4, 5],
       [2, 3, 6]])
np.tile(C,(2,3))  #平铺成两行三列
array([[1, 2, 5, 1, 2, 5, 1, 2, 5],
       [2, 3, 5, 2, 3, 5, 2, 3, 5],
       [3, 4, 5, 3, 4, 5, 3, 4, 5],
       [2, 3, 6, 2, 3, 6, 2, 3, 6],
       [1, 2, 5, 1, 2, 5, 1, 2, 5],
       [2, 3, 5, 2, 3, 5, 2, 3, 5],
       [3, 4, 5, 3, 4, 5, 3, 4, 5],
       [2, 3, 6, 2, 3, 6, 2, 3, 6]])

矩阵运算

A = np.array([[1,2],
              [3,4]])
B = np.array([[1,0],
              [1,1]])
A*B  #对应元素相乘
array([[1, 0],
       [3, 4]])
np.dot(A,B)  #矩阵乘法
array([[3, 2],
       [7, 4]])
np.linalg.inv(B)  #逆矩阵
array([[ 1.,  0.],
       [-1.,  1.]])
np.dot(B,np.linalg.inv(B))
array([[1., 0.],
       [0., 1.]])
A/B  #对应元素相除
C:\Users\18210\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide
  """Entry point for launching an IPython kernel.


array([[ 1., inf],
       [ 3.,  4.]])
A*np.linalg.inv(B)  #矩阵除法
array([[ 1.,  0.],
       [-3.,  4.]])
A*2
array([[2, 4],
       [6, 8]])
A/2
array([[0.5, 1. ],
       [1.5, 2. ]])
A**2  #对应元素平方
array([[ 1,  4],
       [ 9, 16]], dtype=int32)
A*A  #对应元素平方
array([[ 1,  4],
       [ 9, 16]])
np.dot(A,A)
array([[ 7, 10],
       [15, 22]])

求特征值和特征向量

A = np.array([[1,2,3],
              [2,2,1],
              [2,0,3]])
np.linalg.eig(A)  #第一个数组得到的是特征值,第二个得到的是特征值对应的特征向量
(array([-1.31662479,  5.31662479,  2.        ]),
 array([[ 0.83643505, -0.63364028, -0.24077171],
        [-0.38754123, -0.54703747, -0.84270097],
        [-0.38754123, -0.54703747,  0.48154341]]))
a,b = eig(A)
print(a)
print("***********")
print(b)
#需注意,b中每列的数据代表与之对应的特征向量,并非行
[-1.31662479  5.31662479  2.        ]
***********
[[ 0.83643505 -0.63364028 -0.24077171]
 [-0.38754123 -0.54703747 -0.84270097]
 [-0.38754123 -0.54703747  0.48154341]]
X = np.array([1,0,4,-3,0,0,0,8,6])

非零元素

np.nonzero(X)
(array([0, 2, 3, 7, 8], dtype=int64),)
np.nonzero(X)[0]
array([0, 2, 3, 7, 8], dtype=int64)
np.nonzero(X)[0][0]  #返回第一个不为零的元素的索引
0
np.nonzero(X)[0][0:2]  #前两个
array([0, 2], dtype=int64)
X = np.array([[1,-3,0],
              [0,0,8],
              [4,0,6]])
np.nonzero(X)  #(0,0)(0,1)(1,2)(2,0)(2,2)
(array([0, 0, 1, 2, 2], dtype=int64), array([0, 1, 2, 0, 2], dtype=int64))
np.where(X>0)  #(0,0)(1,2)(2,0)(2,2)
(array([0, 1, 2, 2], dtype=int64), array([0, 2, 0, 2], dtype=int64))

猜你喜欢

转载自blog.csdn.net/ddjhpxs/article/details/105406682
今日推荐