簡體   English   中英

如何使用 python:array[:][i][j] 的多維數組中的 select 元素?

[英]How to select elements from a multidimensional array with python : array[:][i][j]?

在 Python 中,我有一個 3 維數組A

A=np.random.random((3,2,3))

print(A)

Out[6]: [[[0.89565135 0.79502322 0.89015957]
  [0.40303084 0.80496231 0.50278239]]

 [[0.70610822 0.61269108 0.00470925]
  [0.29734101 0.67986295 0.34584381]]

 [[0.71822397 0.99326199 0.40949422]
  [0.97733739 0.38916931 0.91475145]]]

我想將 select 作為每個子矩陣的第一個元素,並從中創建一個數組[0.89565135,0.70610822,0.71822397]所以我嘗試了以下公式: A[:][0][0],A[0][:][0],A[0][0][:]但它們都給了我相同的結果,這不是我所期待的......

A[:][0][0]
Out[7]: array([0.89565135, 0.79502322, 0.89015957])

A[0][:][0]
Out[8]: array([0.89565135, 0.79502322, 0.89015957])

A[0][0][:]
Out[9]: array([0.89565135, 0.79502322, 0.89015957])

我可以使用什么公式來獲得正確的數組,為什么上面的公式會給出相同的結果?

對於所有通道,矩陣的第一個元素,您可以對 select 執行以下操作:

A[:, 0, 0]

:引用所有通道, 0表示第一行, 0表示第一列。

Output:

array([0.89565135,0.70610822,0.71822397])

編輯:

如果您正在使用嵌套list ,則可以執行以下操作:

[array[0][0]for array in A]

這顯示了numpy陣列相對於 python list的優勢之一,因為使用numpy選擇更容易(和更快)。

您的索引想法在這里有點缺陷,當您執行A[:][0][0]時,您所做的是A[:]基本上意味着整個矩陣,您要從中指定使用A[:][0]的第一個索引是

[[0.89565135 0.79502322 0.89015957]
  [0.40303084 0.80496231 0.50278239]]

您將在其中進一步指定第一個索引A[:][0][0]這將為您提供第一行

[0.89565135 0.79502322 0.89015957]

按照類似的邏輯,您可以看到在您的第二個索引方案中,您實際上是在做同樣的事情。 你需要做的就是做

 A[0][0][0]
 A[1][0][0]
 A[2][0][0]

你可以簡寫

A[:,0,0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM