我的问题是是否有一种简单的方法将非零值从一个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!=0
条件从b
中选择,或者从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
的另一个答案更好。