gpt4 book ai didi

python - 如何用自然数替换二进制数组中的 1,同时保持 0 的位置?

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:45 27 4
gpt4 key购买 nike

我正在使用 Numpy 和 SciPy。我有两个数组,第一个是二进制数组,第二个是从 ab 的连续自然数范围,例如

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 屏蔽数组和向量化函数的不同方法。我目前的解决方案如下,但为了保持状态,我不得不引入一个全局变量!

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)?

(旁注,我正在使用的实际数组非常大,因此我的解决方案需要对消耗的内存量敏感 - 显然我可以转换为稀疏数组,但我仍然遇到内存错误几次试图找到不同的解决方案。)

最佳答案

这是一种方法:

In [15]: result = np.zeros_like(vals)

In [16]: result[mask > 0] = vals[:mask.sum()]

In [17]: result
Out[17]: array([2, 3, 4, 5, 0, 0, 6, 0])

关于python - 如何用自然数替换二进制数组中的 1,同时保持 0 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com