簡體   English   中英

迭代numpy數組的第一個d軸

[英]Iterating over first d axes of numpy array

我給了一個具有任意數量軸的數組,我想迭代,說出它們的第一個'd'。 我該怎么做呢?

最初我以為我會創建一個包含我要循環使用的所有索引的數組

i = np.indices(a.shape[:d])
indices = np.transpose(np.asarray([x.flatten() for x in i]))
for idx in indices:
    a[idx]

但顯然我不能像這樣索引數組,即使用另一個包含索引的數組。

你可以使用ndindex

d = 2
a = np.random.random((2,3,4))
for i in np.ndindex(a.shape[:d]):
    print i, a[i]

輸出:

(0, 0) [ 0.72730488  0.2349532   0.36569509  0.31244037]
(0, 1) [ 0.41738425  0.95999499  0.63935274  0.9403284 ]
(0, 2) [ 0.90690468  0.03741634  0.33483221  0.61093582]
(1, 0) [ 0.06716122  0.52632369  0.34441657  0.80678942]
(1, 1) [ 0.8612884   0.22792671  0.15628046  0.63269415]
(1, 2) [ 0.17770685  0.47955698  0.69038541  0.04838387]

您可以重塑a以將第一個d維度壓縮為一個:

for x in a.reshape(-1,*a.shape[d:]):
    print x

要么

aa=a.reshape(-1,*a.shape[d:])
for i in range(aa.shape[0]):
    print aa[i]

我們真的需要了解更多關於你需要做什么a[i]


shx2使用np.ndenumerate 該函數的doc提到了ndindex 這可以用作:

for i in np.ndindex(a.shape[:d]):
    print i
    print a[i]

i是一個元組。 查看這些函數的Python代碼是有益的。 ndindex例如使用nditer

寫一個簡單的遞歸函數:

import numpy as np

data = np.random.randint(0,10,size=4).reshape((1,1,1,1,2,2))

def recursiveIter(d, level=0):
    print level
    if level <= 2:
        for item in d:
            recursiveIter(item, level+1)
    else:
        print d

recursiveIter(data)

輸出:

0
1
2
3
[[[2 5]
  [6 0]]]

暫無
暫無

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

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