gpt4 book ai didi

numpy - 改变numpy数组中的元素

转载 作者:行者123 更新时间:2023-12-04 06:19:44 25 4
gpt4 key购买 nike

我有一个 numpy 数组:

a = [3., 0., 4., 2., 0., 0., 0.]

我想要一个由此创建的新数组,其中非零元素转换为它们的零值,零元素转换为等于连续零数的单个数字,即:
b = [0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 3.]

寻找一种矢量化的方式来做到这一点,因为数组将有 > 100 万个元素。
非常感谢任何帮助。

最佳答案

这应该可以解决问题,它的工作原理大致如下:1) 找到所有连续的零并对其进行计数,2) 计算输出数组的大小并用零对其进行初始化,3) 将第 1 部分的计数放在正确的位置。

def cz(a):
a = np.asarray(a, int)

# Find where sequences of zeros start and end
wz = np.zeros(len(a) + 2, dtype=bool)
wz[1:-1] = a == 0
change = wz[1:] != wz[:-1]
edges = np.where(change)[0]
# Take the difference to get the number of zeros in each sequence
consecutive_zeros = edges[1::2] - edges[::2]

# Figure out where to put consecutive_zeros
idx = a.cumsum()
n = idx[-1] if len(idx) > 0 else 0
idx = idx[edges[::2]]
idx += np.arange(len(idx))

# Create output array and populate with values for consecutive_zeros
out = np.zeros(len(consecutive_zeros) + n)
out[idx] = consecutive_zeros
return out

关于numpy - 改变numpy数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19415922/

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