簡體   English   中英

NumPy - 在 nd 數組的每一列中查找和打印非零元素

[英]NumPy - Finding and printing non-zero elements in each column of a n-d array

假設我有以下 Numpy nd 數組:

array([[['a',0,0,0],
        [0,'b','c',0],
        ['e','d',0,0]]])

現在我想定義元素的“雙重連接”,如下所示:

  1. 我們將此數組中的每一列視為一個時間瞬間,並且該瞬間中的所有元素都被認為是同時發生的。 0 表示什么都沒有發生。 例如,a 和 e 發生在第一個時刻,b 和 d 發生在第二個時刻,c 本身發生在第三個時刻。
  2. 如果有兩個元素,我相信它有“雙重連接”,我想打印這樣的連接(如果一列中沒有這樣的對,則繼續到下一列直到結束):
('a','e')
('e','a')
('b','d')
('d','b')

我試圖提出迭代所有列的解決方案,但沒有奏效。有人可以分享一些關於此的提示嗎?

您可以通過以下命令重新創建原始數組

array = np.array([['a',0,0,0],
    [0,'b','c',0],
    ['e','d',0,0],dtype=object)

您可以計算每列有多少個非零元素。 您選擇具有兩個非零元素的列,重復它們並每隔一列反轉:

pairs = np.repeat(array[(array[:, (array != 0).sum(axis=0) == 2]).nonzero()].reshape((2, -1)).T, 2, axis=0)
pairs[1::2] = pairs[1::2, ::-1]

如果你想將這些轉換為你想要的輸出中的元組,你可以做一個列表理解:

output = [tuple(pair) for pair in pairs]

暫無
暫無

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

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