如何在两个位置之间更改numpy数组的值

时间:2017-04-26 19:04:05

标签: python arrays list numpy

我有一个充满0的numpy数组,比如这个

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

以及此类职位列表

   [2-4,6-10] 

所以我想要做的是遍历位置列表,然后将numpy数组中的0更改为相应位置内的1,这样我就应该有一个numpy数组,如。

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

希望这很清楚,如果不是让我知道的话。

感谢。

2 个答案:

答案 0 :(得分:5)

以下一种方法是将这些索引生成为np.r_的连续数组,然后编制索引并分配1s -

In [64]: a = np.array([0,0,0,0,0,0,0,0,0,0,0,0])

In [65]: pos = np.r_[1:4,5:10]

In [66]: a[pos] = 1

In [67]: a
Out[67]: array([0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0])

答案 1 :(得分:1)

您可以使用对子列表来保存位置;

l = [(2, 4), (6, 10)]
nl = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

其次,使用循环;

for a in l:
  for c, n in enumerate(nl) 
    if (a[0] >= c || a[1] <= c):
       nl[c] = 1

到目前为止,这不是最快的方法,但它简单易读。

根据this user的建议,你可以改用它,这在我看来要好得多;

nl[a[0]:[a[1]]=[1]*(a[1]-a[0])