假设我有以下数据:
mask = [[0, 1, 1, 0, 1]] # 2D mask
ip_array = [[4, 5, 2],
[3, 2, 1],
[1, 8, 6]] # 2D array
我想在ip_array
中插入0列,只要掩码中有0。所以输出应该是这样的:
[[0, 4, 5, 0, 2]
[0, 3, 2, 0, 1]
[0, 1, 8, 0, 6]]
我是numpy函数的新手,我正在寻找一种有效的方法来做到这一点。任何帮助是赞赏!
5条答案
按热度按时间vd2z7a6w1#
这里有一种方法可以分两步完成:
(i)创建一个形状正确的零数组(第一维为
ip_array
,第二维为mask
)(ii)在第二维上使用
mask
(作为布尔掩码),并将ip_array
的值赋给零数组。输出:
rbpvctlc2#
这里是另一种使用切片的方法,使用
cumsum
掩码和输入中的额外0列。每当添加零时,cumsum掩码将具有ip_array
+ 1和0的索引。串联数组有一个额外的初始零列,因此用0索引会产生一个零列。3zwjbxry3#
一个解决方案与参数和其他方式做比绿色检查。所以更容易理解。只是最后一行对操作很重要。
结果:
这里你的时间处理取决于n值:
使用此代码:
tzdcorbm4#
kninwzqo5#
可以说最简单的解决方案是使用
np.insert
为您创建新列:从
idx
中减去np.arange(len(idx))
是必要的,因为要插入的数组还没有新的列,所以旧数组中的索引会减少前面插入的列的数量。两行:
使用walrus操作符的一行程序(python 3.8+):
一个没有,但有更多冗余: