gpt4 book ai didi

python - 从 numpy 数组中删除条目

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:36 24 4
gpt4 key购买 nike

我有一个形状为 (4, 2000) 的多维 numpy 数组。数组中的每一列都是一个 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,) 的 bool 数组,只要掩码为 1,它就为真:

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

mask[xarr, yarr] 使用所谓的 "integer array indexing" .这意味着 idx 的第 ith<​​ 元素等于 mask[xarr[i], yarr[i]]

然后从数组中选择那些列:

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)

关于python - 从 numpy 数组中删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com