如何替换numpy数组中由0和1组成的每三个0 ?



我是Python和Stackoverflow的新手,所以如果这个问题很愚蠢和/或重复,我提前表示抱歉。

我正在尝试编写一个代码,替换numpy数组中由0和1组成的每个第n个0。

例如,如果我想将每三个0替换为0.5,预期的结果是:输入:np。数组([0,0,0,1,1,1,1,1,0,0,1])输出:np。阵列([0,0,0.5,0,1,1,1,1,- 1,0,0.5,1,0,1])

我写了下面的代码:

import numpy as np
arr = np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1])
counter = 0
for i in range(len(arr)):
if arr[i] == 0 and counter%3 == 0:
arr[i] = 0.5
counter += 1
print(arr)

期望输出为[0,0,0.5,0,1,1,1,1,1,0,0.5,1,0,1]。

然而,输出与输入完全相同,它没有替换任何值…有人知道为什么这不能取代价值,我该如何解决这个问题吗?谢谢你。

相当快和脏:

  1. 查找为零的项的索引
indices = np.flatnonzero(arr == 0)
  1. 取每三分之一的索引
indices = indices[::3]
  1. 正如在评论中提到的,你需要一个float类型
arr = arr.astype(float)
  1. 将这些指标设置为0.5
arr[indices] = 0.5

最新更新