簡體   English   中英

在numpy ndarray中尋找鄰居

[英]finding neighbours in a numpy ndarray

我有一個numpy ndarray問題。 現在,此數組可以是2D或3D,具體取決於可用的輸入,而我想做的就是沿每個軸獲取每個樣本的“先前”鄰居。 因此在2D模式下,如果想像以下數組:

1 2 3 4
5 6 7 8
4 3 2 1

現在,我只需要索引中實際上具有有效的“上一個”鄰居(因此不包括頂部和左側邊界條目)的值。 因此,這應該還給我(類似):

[[0, 1], [1, 0]], [[1, 1], [2, 0]], [[2, 1], [3, 0]] # corresponding to 6, 7, 8 entries
[[0, 2], [1, 1]], [[1, 2], [2, 1]], [[2, 2], [3, 1]] # corresponding to 3, 2, 1 entries

基本上只考慮子數組。

6 7 8
3 2 1

同樣,如果是3D,則還有另一個軸,但具有相似的規則,即僅使用有效條目獲取子數組。 然后,我想使用這些索引來操縱原始數組中的條目。 但是,我無法弄清楚如何有效地生成這些索引,而不必借助ndarray的軸(也未固定)上的循環。

好的,我知道了。 在ym情況下,我可以簡單地使用numpy索引。 所以像這樣:

import numpy as np
i = np.indices(x-2 for x in data.shape)

然后,我可以將其用作:

data[i[0], i[1], i[2]...]

考慮您提供的數據

import numpy as np
data = np.array([[1, 2, 3, 4],
                 [5, 6, 7, 8],
                 [4, 3, 2, 1]])

如果我理解正確,那么使用切片將為您提供所需的確切信息,即

>>> data[1:, 1:]
array([[6, 7, 8],
       [3, 2, 1]])

因此,如果有效的先前鄰居意味着在這些項目的上方和左側存在鄰居,則只需對數組的每個維度應用相同的切片1: :。 在3D data[1:, 1:, 1:]等。

暫無
暫無

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

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