索引后查看形狀:
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,形狀(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
=============================
“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數組,表示第1項.對于2d數組,它表示第1行.對于ndarray,它將是一個1d數組,但對于矩陣,它是另一個矩陣.因此對于2d數組或矩陣,A [i,:]與A [i]是相同的.
A [0]不只是返回自己.它返回一個新矩陣.不同的身份:
In [303]: id(A)
Out[303]: 2994367932
In [304]: id(A[0])
Out[304]: 2994532108
它可能具有相同的數據,形狀和步幅,但它是一個新對象.它與許多行矩陣的第i行一樣獨特.
大多數獨特的矩陣活動定義在:numpy / matrixlib / defmatrix.py中.我打算建議查看矩陣.__ getitem__方法,但大多數動作都是在np.ndarray .__ getitem__中執行的.
為了方便老派的MATLAB程序員,np.matrix類被添加到numpy中. numpy數組幾乎可以有任意數量的維度,0,1,…. MATLAB只允許2,盡管2000左右的版本將其推廣到2或更多.