簡體   English   中英

從numpy數組中刪除條目

[英]removing entries from a numpy array

我有一個多維的numpy數組形狀(4,2000)。 數組中的每一列都是4D元素,其中前兩個元素表示2D位置。

現在,我有一個與二進制圖像形狀相同的圖像蒙版,告訴我哪些像素有效或無效。 掩碼中的條目0突出顯示無效的像素。

現在,我想做的是基於這個掩碼過濾我的第一個數組,即刪除第一個數組中的位置元素對應於圖像中的無效像素的條目。 這可以通過查找掩碼中的相應條目並標記要刪除的那些列來完成,這些列對應於掩碼中的0條目。

所以,像:

import numpy as np
# Let mask be a 2D array of 0 and 1s

array = np.random.rand(4, 2000)

for i in range(2000):
    current = array[:, i]
    if mask[current[0], current[1]] <= 0:
        # Somehow remove this entry from my array.

如果可能的話,我想在沒有循環的情況下這樣做,因為我的代碼不完整。

您可以從array選擇x和y坐標,如下所示:

xarr, yarr = array[0, :], array[1, :]

然后形成一個布爾形狀的數組(2000,),無論掩碼是1,它都是True:

idx = mask[xarr, yarr].astype(bool)

mask[xarr, yarr]正在使用所謂的“整數數組索引” 這意味着idxith元素等於mask[xarr[i], yarr[i]]

然后從array選擇那些列:

result = array[:, idx]

import numpy as np

mask = np.random.randint(2, size=(500,500))
array = np.random.randint(500, size=(4, 2000))

xarr, yarr = array[0, :], array[1, :]
idx = mask[xarr, yarr].astype(bool)
result = array[:, idx]

cols = []
for i in range(2000):
    current = array[:, i]
    if mask[current[0], current[1]] > 0:
        cols.append(i)
expected = array[:, cols]

assert np.allclose(result, expected)

我不確定我是否正確地閱讀了這個問題。 讓我們再試一次!

您有一個包含2維的數組,並且您希望刪除所有具有屏蔽數據的列。 如果我讀錯了,請再次道歉。

import numpy.ma as ma
a = ma.array((([[1,2,3,4,5],[6,7,8,9,10]]),mask=[[0,0,0,1,0],[0,0,1,0,0]])
a[:,-a.mask.any(0)] # this is where the action happens

a.mask.any(0)標識所有被屏蔽到布爾數組中的列。 它被否定(' - '符號),因為我們想要反轉,然后它使用該數組通過索引刪除所有被屏蔽的值。

這給了我一個數組:

[[1 2 5],[6 7 10]]

換句話說,數組已經刪除了所有具有屏蔽數據的列。 希望這次我做對了。

暫無
暫無

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

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