[英]Numpy copy non-zero elements from one array to another (3D array)
我的问题是是否有一种简单的方法可以将非零值从一个 numpy 3d 数组复制到另一个。 我不想为此创建 3 个 for 循环......
假设我有一个数组 a:
a = np.array([ [ [1,2,3], [4,5,6]],[[7,8,9], [10,11,12] ] ])
# to visualize it better:
# a = np.array([
# [
# [1,2,3],
# [4,5,6]
# ],
# [
# [7,8,9],
# [10,11,12]
# ]
# ])
#
然后有一个数组b:
b = np.array([ [[3,0,9], [0,0,0]], [[0,0,0], [45,46,47]] ])
# to visualize it better:
# b = np.array([
# [
# [3,0,9],
# [0,0,0]
# ],
# [
# [0,0,0],
# [45,46,47]
# ]
# ])
#
我想合并这些数组以接收来自 b 的非零元素和来自 a 的其他元素(这些元素在 b 中为 0)所以输出看起来像:
#
# np.array([
# [
# [3,2,9],
# [4,5,6]
# ],
# [
# [7,8,9],
# [45,46,47]
# ]
# ])
#
它不必是 numpy,它可以是 openCV,但我仍然想知道如何实现这一点。
您可以尝试使用np.where
从b
选择条件b!=0
,或者从a
选择:
combined_array = np.where(b!=0, b, a)
>>> combined_array
array([[[ 3, 2, 9],
[ 4, 5, 6]],
[[ 7, 8, 9],
[45, 46, 47]]])
这应该这样做:
import numpy as np
a = np.array([ [ [1,2,3], [4,5,6]],[[7,8,9], [10,11,12] ] ])
b = np.array([ [[3,0,9], [0,0,0]], [[0,0,0], [45,46,47]] ])
c = b.copy()
c[b==0] = a[b==0]
print(c)
#[[[ 3 2 9]
# [ 4 5 6]]
#
# [[ 7 8 9]
# [45 46 47]]]
其中b==0
是一个与b
具有相同形状的数组,其中如果b
中的相应元素等于 0,则元素为 True,否则为 False。 然后,您可以用它来选择的零个元素b
和在这些指数中,值替换它们a
。
编辑: np.where
的另一个答案更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.