根据以前的值修改numpy数组

2024-09-30 06:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个np数组

[1, 1, 1, 1, 0, 1, 0, 1, 0]

现在我想修改索引I s.t处的数字,如果前面的n个元素中有一个是1,那么它就是0。但是这个计算不应该是静态的w.r.t到原始数组,而是动态的,即考虑已经改变的值。假设n=2,那么我想得到

^{pr2}$

在没有for循环的情况下,如何高效地完成这项工作? 简单索引将在一次迭代中遍历整个数组,忽略新更改的值,这意味着结果将是

^{3}$

对吧?在

更新: 在循环中我会这样做:

for i in range(a.shape[0]):
    FoundPrevious = False
    for j in range(n):
        if i - j < 0:
            continue
        if a[i - j] == 1:
            FoundPrevious = True
            break
    if FoundPrevious:
        a[i] = 0

Tags: in元素forifnp静态情况动态
2条回答

问题本质上是迭代的,但是您可以通过对列表进行一次遍历来简化事情。在

arr = [1, 1, 1, 1, 0, 1, 0, 1, 0]
n = 2
newarr = []

for i in arr:
    newarr.append(0 if sum(newarr[-n:]) else i)

^{pr2}$

正如其他回答者和评论者所指出的,问题的内在互动性使得没有for循环的解决方案变得不明显。在

简化此问题的另一种方法是:

import numpy as np

a = np.array([1, 1, 1, 1, 0, 1, 0, 1, 0])
n = 2

for i in range(a.shape[0]):
    i0 = i - 2 if i >= 2 else 0
    if 1 in a[i0:i]:
        a[i] = 0

print(a)
# [1 0 0 1 0 0 0 1 0]

相关问题 更多 >

    热门问题