我正在尝试使用此简单代码在数组中搜索并替换大于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的边界
答案 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
循环中遍历数组时,实际上是在访问元素,而不是索引。毕竟,您正在将x
与1
进行比较。您可以通过多种方式检索索引,常见的一种方式是使用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))