本文仅介绍 Numpy 库中:
- 提取矩阵中的某一行/某一列
- 提取向量和矩阵中的元素
1、Numpy数组矩阵中提取某一行/某一列
通过数组定义一矩阵,并提取某一行/某一列:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
b = a[2,:]
c = a[:,1]
矩阵 a 为:

b为矩阵 a 的第三行, c 为矩阵 a 的第二列元素组成的数组。 b的形状为(3, ),c 的形状为(4, )。上一节已明确对于此类形状的数组在运算时视为行向量。此时,提取矩阵的第二列后获得的变量 c 为行向量,不是理想的结果。
首先想到,由于在运算时,将变量c 视为行向量,则如果对变量 c 进行转置,是否可以将行向量变为列向量呢?
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
b = a[2,:]
c = a[:,1]
c_T = c.T
可以从结果中看到,变量c_T的形状仍然为(4, )。即对于此类形状的数组,转置无效。
如何提取矩阵某一列后直接获得一个列向量,下面介绍三种方法:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
c1 = a[:,1].reshape((4,1))
c2 = np.c_[a[:,1]]
c3 = a[:,1].reshape((-1,1))
这里获得的 c1 , c2 和 c3 均为形状为(4, 1)的列向量,也即矩阵 a 的第二列。值得注意的是, c1 对应的方法需要预知矩阵 a 的形状,而 c2 和 c3 对应的方法无需知道矩阵 a 的形状,这将在某种程度上带来一定便利。
总结:提取数组矩阵某一列时,需要额外操作将其转化为列向量。
2、Numpy数组向量/矩阵中提取某一元素
提取下述向量和矩阵中的元素:
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
b = np.array([[1,2,3,4]])
c = np.array([[5],[6],[7],[8]])
a21 = a[1,0]
b2 = b[:,1]
c3 = c[2,:]

因此,在提取数组向量中的某个元素时,得到的仍然为数组,也即只有一个元素的行向量。
如果要将向量中提取到的元素直接参与数域运算,则需要做类型转换:
import numpy as np
b = np.array([[1,2,3,4]])
c = np.array([[5],[6],[7],[8]])
b2 = float(b[:,1])
c3 = int(c[2,:])
此时 b2 的值为2,类型为float; c3 的值为7,类型为int。
总结:提取向量中的值参与数域运算要做类型转换。
430

被折叠的 条评论
为什么被折叠?



