在 NumPy 中使用掩码编写用于应用反向操作的高效代码
Writing an efficient code for applying a reverse operation using masks in NumPy
首先,我有一个压缩的 numpy 数组 c 和一个用于从完整数组 a 生成 c 的掩码 m。
我想输出一个与原始数组 a 形状相同的重构数组 b,但使用压缩数组的结果。以下代码适用于此,但我不知道如何提高效率。任何指导将不胜感激
import numpy as np
a = np.asarray((1, 2, 3, 4, 5, 6, 7, 8, 9))
m = np.array((True,True,True,True,False,False,True,True,True))
c = np.ma.compressed(np.ma.masked_where(m==False, a))
i=0
j=0
b = np.zeros(a.size)
while (i<a.size):
if (m[i] == True):
b[i] = c[j]
j = j+1
i = i+1
b
这导致:
array([1., 2., 3., 4., 0., 0., 7., 8., 9.])
你能试试吗,
b = a*m
这应该会给你想要的输出。
您可以使用布尔索引:
b = np.zeros_like(m, dtype=float) # change dtype to `int` if that's what you want.
b[m] = c
输出
array([1., 2., 3., 4., 0., 0., 7., 8., 9.])
首先,我有一个压缩的 numpy 数组 c 和一个用于从完整数组 a 生成 c 的掩码 m。
我想输出一个与原始数组 a 形状相同的重构数组 b,但使用压缩数组的结果。以下代码适用于此,但我不知道如何提高效率。任何指导将不胜感激
import numpy as np
a = np.asarray((1, 2, 3, 4, 5, 6, 7, 8, 9))
m = np.array((True,True,True,True,False,False,True,True,True))
c = np.ma.compressed(np.ma.masked_where(m==False, a))
i=0
j=0
b = np.zeros(a.size)
while (i<a.size):
if (m[i] == True):
b[i] = c[j]
j = j+1
i = i+1
b
这导致:
array([1., 2., 3., 4., 0., 0., 7., 8., 9.])
你能试试吗,
b = a*m
这应该会给你想要的输出。
您可以使用布尔索引:
b = np.zeros_like(m, dtype=float) # change dtype to `int` if that's what you want.
b[m] = c
输出
array([1., 2., 3., 4., 0., 0., 7., 8., 9.])