我用的是Numpy和SciPy。我有两个数组,第一个是二进制的,第二个是从a
到b
的连续自然数范围
mask = np.array([1, 1, 1, 1, 0, 0, 1, 0]) # length of 8, with 5 ones and 3 zeros
vals = np.array([2, 3, 4, 5, 6, 7, 8, 9]) # length of 8, only first 5 values will be used in this case - corresponding to the 5 ones in the first array
我想用第二个数组中的值替换第一个数组中的1(按顺序排列),例如,在这个示例场景中,所需的结果是:
result = [2,3,4,5,0,0,6,0]
我已经用NumPy掩码数组和vectorise函数尝试了不同的方法。我当前的解决方案如下,但为了保持状态,我必须引入一个全局变量!你知道吗
global count
count = 0
def func(a,b):
global count
if a ==1:
return b - count
else:
count +=1
return 0
v_func = np.vectorize(func)
result = v_func(mask, vals)
print result
有没有一种更优雅的方法(最好是使用NumPy)?你知道吗
(请注意,我使用的实际数组非常大,因此我的解决方案需要对占用的内存量非常敏感—显然,我可以转换为稀疏数组,但为了找到不同的解决方案,我仍然多次遇到内存错误。)
有一种方法:
这是一个一行,虽然我必须说这不是一个优化的方式,也不是很优雅。但你可以检查它的实践目的。你知道吗
相关问题 更多 >
编程相关推荐