在python中更改数组的某些索引的值

时间:2019-03-02 21:06:42

标签: python arrays numpy

我正在尝试使用此简单代码在数组中搜索并替换大于1到1的元素。

import numpy as np

j = np.array([[1],[3],[1],[0],[9]])

for x in j:
    if abs(x) > 1 :
        j[x] = 1

但是我得到了这样的错误:

  

IndexError:索引9超出了大小为5的轴0的边界

6 个答案:

答案 0 :(得分:4)

如果absolute(j[i])大于1到1,则您要做的就是所有值,那么numpy内置了此功能,它很简单,可以一行完成,比任何python循环都更高效:

j[np.absolute(j) > 1] = 1

向您展示其工作方式:

#made 3 a negitive value to prove absolute works.
j = np.array([[1],[-3],[1],[0],[9]])

j[np.absolute(j) > 1] = 1

j现在是:

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

答案 1 :(得分:1)

for循环中遍历数组时,实际上是在访问元素,而不是索引。毕竟,您正在将x1进行比较。您可以通过多种方式检索索引,常见的一种方式是使用enumerate,如下所示:

import numpy as np

j = np.array([[1],[3],[1],[0],[9]])

for i,x in enumerate(j):    # i is the index, x is the value
    if abs(x) > 1 :
        j[i] = 1

答案 2 :(得分:1)

尝试使用<!DOCTYPE HTML> <html> <head> <style> #div1, #div2 { float: left; width: 100px; height: 35px; margin: 10px; padding: 10px; border: 1px solid black; } </style> </head> <body> <h2>Drag and Drop</h2> <p>Drag the image back and forth between the two div elements.</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="img_w3slogo.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31"> </div> <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div> </body> </html>将for循环更改为:

enumerate

答案 3 :(得分:1)

您在错误输出中看到的

  

IndexError:索引9超出了大小为5的轴0的边界

您正在尝试更新索引9处的值,但数组的大小为5。 显然,这意味着您不是在使用数组的索引,而是实际上在index处的值。

枚举数组并使用索引和值运行循环

for i,x in  enumerate(j):
    if abs(x) > 1 :
        j[i] = 1

答案 4 :(得分:1)

您是否要制作二维数组?您将元素放在方括号“ [[1],[3],[1],[0],[9]]”中。....而且,您正在遍历值,而不是索引:x是一个数组值“ [3]”而不是索引“ 1”。

更改为:

import numpy as np

j = np.array([1,3,1,0,9])

# Keep track of index starting at 0
i = 0
for x in j:
    if abs(x) > 1 :
        # change value at index i
        j[i] = 1
    # increment index
    i += 1

答案 5 :(得分:0)

您可能要用以下内容替换for语句:

for x in range(len(j))