gpt4 book ai didi

python - 删除 M X N numpy 数组中特定位置的元素

转载 作者:行者123 更新时间:2023-11-30 23:05:07 25 4
gpt4 key购买 nike

我正在尝试实现接缝雕刻算法,其中我们必须从图像中删除接缝。图像存储为 numpy M X N 数组。我找到了接缝,它只不过是一个 M 整数数组,其值指定要删除的列值。

例如:2 X 3 数组

import numpy 
img_array = numpy.array([[1, 2, 3],[4, 5, 6]])

seam = numpy.array([1,2]) 

这意味着我们必须从 Img 中删除第一行 (1) 中的第一个元素,以及第二行 (5) 中的第二个元素。删除后,Img将为

print img_array

[[2,3]
[4,6]]

完成的工作:

我是 python 新手,I have found solutions关注一维数组或 deleting an entire row or column 。但我找不到从特定列中删除元素的方法。

最佳答案

您总是会从每一行中删除一个元素吗?如果您尝试从一行中删除一个元素,而不是另一行中的元素,那么您最终会得到一个参差不齐的数组。这就是为什么没有通用方法从二维数组中删除单个元素的原因。

一种选择是找出要删除的数组,将它们从展平数组中删除,然后将其重新调整回正确的形状。然后,您有责任确保删除正确数量的元素。

所有这些“删除”方法实际上都会将“保留”值复制到新数组中。实际上没有什么会从原始数组中删除元素。因此,您可以同样轻松(并且同样快速)将自己的副本复制到新数组中。

另一个选项是使用列表列表。那些人更能容忍衣衫褴褛。

这是使用 bool 掩码从数组中删除所选元素的示例(当然是制作副本):

In [100]: x=np.arange(1,7).reshape(2,3)
In [101]: x
Out[101]:
array([[1, 2, 3],
[4, 5, 6]])
In [102]: mask=np.ones_like(x,bool)
In [103]: mask
Out[103]:
array([[ True, True, True],
[ True, True, True]], dtype=bool)
In [104]: mask[0,0]=False
In [105]: mask[1,1]=False
In [106]: mask
Out[106]:
array([[False, True, True],
[ True, False, True]], dtype=bool)
In [107]: x[mask]
Out[107]: array([2, 3, 4, 6]) # it's flat
In [108]: x[mask].reshape(2,2)
Out[108]:
array([[2, 3],
[4, 6]])

请注意,即使 xmask 都是 2d,索引结果也会被展平。这样的掩模很容易产生一个无法 reshape 回二维的数组。

关于python - 删除 M X N numpy 数组中特定位置的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336462/

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