索引后查看形状:
In [295]: A=np.matrix([1,2,3])In [296]: A.shapeOut[296]: (1, 3)In [297]: A[0]Out[297]: matrix([[1, 2, 3]])In [298]: A[0].shapeOut[298]: (1, 3)
此行为的关键
np.matrix是始终为2d。因此,即使您选择一行(
A[0,:]),结果仍然是2d shape
(1,3)。因此,您可以随心所欲地串
[0]起来,没有新的事情发生。
您想完成
A[0][0]什么?一样
A[0,0]吗?对于基
np.ndarray类,它们是等效的。
注意,
Python解释器将索引转换为
__getitem__调用。
A.__getitem__(0).__getitem__(0) A.__getitem__((0,0))
[0][0]是2个索引操作,而不是一个。因此,第二种的效果
[0]取决于第一种的产生。
对于数组
A[0,0]等效于
A[0,:][0]。但是对于矩阵,您需要执行以下操作:
In [299]: A[0,:][:,0]Out[299]: matrix([[1]]) # still 2d
============================
“一个数组本身”,但是我怀疑任何一个在他们的头脑中正确的人都会选择它作为科学图书馆中矩阵的模型。
那么,我获得的输出的逻辑是什么?为什么矩阵对象的第一个元素是自身?
另外,A [0 ,:]与A [0]不同
根据这些评论,让我提出一些澄清。
A[0]并不意味着“返回第一个元素”。表示沿第一轴选择。对于一维数组,表示第一项。对于二维数组,它表示第一行。因为
ndarray那将是一个1d数组,但对于a
matrix则是另一个
matrix。因此对于2d数组或矩阵,
A[i,:]与相同
A[i]。
A[0]不仅返回自己。它返回一个新矩阵。不同
id:
In [303]: id(A)Out[303]: 2994367932In [304]: id(A[0])Out[304]: 2994532108
它可能具有相同的数据,形状和步幅,但这是一个新对象。它
ith与多行矩阵的行一样唯一。
大多数独特的
matrix活动在中定义:
numpy/matrixlib/defmatrix.py。我本来建议您看一下该
matrix.__getitem__方法,但是大多数操作都在中执行
np.ndarray.__getitem__。
np.matrix类的添加
numpy是为了方便老式的MATLAB程序员。
numpy数组几乎可以具有任意数量的维,即0、1…。尽管2000年左右的版本将其推广到2个或更多,但MATLAB仅允许2个。



