索引后查看形狀:In [295]: A=np.matrix([1,2,3])
In [296]: A.shape
Out[296]: (1, 3)
In [297]: A[0]
Out[297]: matrix([[1, 2, 3]])
In [298]: A[0].shape
Out[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]是兩個索引操作,而不是一個。因此,第二個[0]的效果取決于第一個產生什么。
對于數組A[0,0]相當于A[0,:][0]。但對于矩陣,您需要:In [299]: A[0,:][:,0]
Out[299]: matrix([[1]]) # still 2d
一、二、二、三"An array of itself", but I doubt anyone in their right mind would choose that as a model for matrices in a scientific library.
What is, then, the logic to the output I obtained? Why would the first element of a matrix object be itself?
In addition, A[0,:] is not the same as A[0]
鑒于這些評論,讓我提出一些澄清意見。
A[0]并不意味著“返回第一個元素”。意思是沿著第一個軸選擇。表示第一個項目的1d數組。對于二維數組,它表示第一行。對于ndarray來說,它是一個一維數組,而對于matrix來說,它是另一個matrix。所以對于二維數組或矩陣,A[i,:]和A[i]是一樣的。
A[0]不只是返回本身。它返回一個新矩陣。不同的id:In [303]: id(A)
Out[303]: 2994367932
In [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。。。。MATLAB只允許2個,盡管2000年左右的一個版本將其概括為2個或更多。