我有两个这样的数组:
a = [[1,2,-3],[4,5,-6],[7,8,9]]
b = [[2,-5,0],[0,4,8],[-2,1,0]]
每个数字“ a”都应替换为“ b”中的一个,但“ b”的数量为0的除外:
result = [[2,-5,-3],[4,4,8],[-2,1,9]]
我当前的解决方案花费的时间太长:
for row in range(len(b)):
for column in range(len(b[row])):
if b[row][column] != 0 or b[row][column] != -0:
a[row][column] = b[row][column]
顺便说一句。 “ b [row] [column]!= -0”是否必要?由于b中有时有“ 0”,有时有“ -0”。
有没有快速的方法? 谢谢。
答案 0 :(得分:3)
只需使用np.where()
a = np.array(a)
b = np.array(b)
a = np.where(b == 0, a, b)
如果您想花哨并节省内存,请使用np.place()
np.place(a, b != 0, b[b != 0])
编辑:由于0 == -0
评估True
,因此您不需要任何其他检查
答案 1 :(得分:0)
一种可能性:
a[np.where(b !=0)] = b[np.where(b !=0)]