我試圖找到一個實作訪問numpy陣列元素的方法,對應于Matlab的一個特性。
假設給定一個(2,2,2)Matlab矩陣m的形式
m(:,: ,1) = [1,2; 3,4]
m(:,:,2) = [5,6; 7,8]
盡管這是一個3維陣列,Matlab允許以這樣的方式訪問它的列
m(:,1) = [1; 3]
m(:,2) = [2; 4]
m(:,3) = [5;7]
m(:,4) = [6; 8]
我很想知道numpy是否支持這樣的索引,以便給定下面的陣列
。m = array([[1, 2],
[3, 4]]。
[[5, 6],
[7, 8]]])
我們也可以按照Matlab上面列出的方式來訪問列。
uj5u.com熱心網友回復:
我對這個問題的回答如下,假設給定問題中列出的陣列
m = array([[1, 2],
[3, 4]]。
[[5, 6],
[7, 8]]])
人們可以創建一個串列,我稱它為m_list,其形式為
m_list = [m[i][:,j] for i in range(m. shape[0]) for j in range(m.shape[-1]) ]
這將輸出m_list的形式,以便
m_list = [array([1, 3]), array([2, 4]), array([7, 9]) 。array([ 8, 10 ])]
現在我們可以訪問m_list中的元素,就像問題中列出的Matlab的時尚一樣。
uj5u.com熱心網友回復:
在[41]: m = np. arange(1,9).reshape(2,2, 2)
在[42]: m
輸出[42]。
array([[1, 2],
[3, 4]]。
[[5, 6],
[7, 8]]])
索引相等的塊:
In [47]。
Out[47]。array([1, 3] )
在 [48]/span>。
Out[48]。array([2, 4] )
在 【49】。m[1,:,0]: [1,:,0]
Out[49]。array([5, 7] )
在 [50]。m[1,:,1]: [1,:,1]
Out[50]: array([6, 8] )
我們可以重塑,以 "壓扁 "一對尺寸:
我們可以重塑,以 "壓扁 "一對尺寸:
在[84]: m = np.arange(1,9)。 reshape(2,2, 2)
在[85]: m.reshape(2,4)
Out[85]。
array([1, 2, 3, 4],
[5, 6, 7, 8]])
在[87]: m.reshape(2,4) [:, 2]
出來[87]。array([3, 7] )
并扔進一個轉置:
在[90]: m. transpose(1,0,2) .reshape(2,4)
Out[90]。
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
MATLAB最初是嚴格的2d。 然后在v3.9(2000年)左右的某個時候,他們允許了更多的內容,但卻是以一種笨拙的方式。 他們增加了一種方法來索引尾部的維度,就好像它是多維的一樣。 在最近的另一個SO中,我注意到當reshaping到(2,2,1,1)時,結果仍然是(2,2)。 后面尺寸為1的維度被擠掉了。
我懷疑m(:,3)也是這種情況的一個結果。
測驗一個4d的MATLAB
m=reshape(1: 36,2,3,3,2)。)
>> m(:,:,1)
ans =
1 3 5 >。
2 4 6
reshape(m,2,3,6) (: ,:,1)
ans =
1 3 5 >。
2 4 6
m(:,17)
ans =
33
34
reshape(m,2,18)(:,17)
ans =
33
34
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309716.html
標籤:
