我尝试运行此代码
import numpy as np
X=[]
j=0
a=np.array([1,-8,-9,2,5,8,7,1,-5,-5,1])
S=np.array([4,8,9,8,9,55,6,62,23,2,-2])
index=np.array(np.where(a>0))
for j in range (0,np.size(index)):
X.append( S[index[j]] )
print(X)
但是我得到IndexError
并且我不明白为什么。有人可以帮忙吗?
答案 0 :(得分:0)
您使用数组中的元素" index"决定从S数组中取出哪个元素
S[index[j]]
您要拉的值(索引[j]的值)指向不在S中的位置。
我怀疑你的问题是np.where操作返回a
的索引,其中条件为真,所以你得到的值是10,这是一个超过S的最后一个索引的.10是S的长度。
答案 1 :(得分:0)
In [111]: j=0
In [112]: a=np.array([1,-8,-9,2,5,8,7,1,-5,-5,1])
...: S=np.array([4,8,9,8,9,55,6,62,23,2,-2])
...:
In [113]: index=np.array(np.where(a>0))
In [114]: index
Out[114]: array([[ 0, 3, 4, 5, 6, 7, 10]], dtype=int32)
In [115]: _.shape
Out[115]: (1, 7)
通过将where
包裹在np.array
中,您创建了一个(1,7)数组。这是故意的吗?你了解后果吗?
In [116]: np.size(index)
Out[116]: 7
大小给出了元素的总数。通常我们使用shape
。
j=0
确定时的索引:
In [117]: index[0]
Out[117]: array([ 0, 3, 4, 5, 6, 7, 10], dtype=int32)
除非我们选择了多个值 - (1,7)数组的第一行。
将j
提升为1,我们得到索引错误:
In [118]: index[1]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-118-f6a00d4fbf8f> in <module>()
----> 1 index[1]
IndexError: index 1 is out of bounds for axis 0 with size 1
试图选择第二行。
请注意整个索引错误消息 - 索引,大小,轴。所有这些信息都是相关的,应该包含在您的错误消息中。
回到where
。这会产生1个元组的大小(1 dim),其中包含7个元素的数组。
In [124]: index = np.where(a>0)
In [125]: index
Out[125]: (array([ 0, 3, 4, 5, 6, 7, 10], dtype=int32),)
该元组可以直接用于索引。例如,a
的正值为:
In [126]: a[index]
Out[126]: array([1, 2, 5, 8, 7, 1, 1])
由于S
具有相同的形状,因此相应的元素为:
In [127]: S[index]
Out[127]: array([ 4, 8, 9, 55, 6, 62, -2])
无需循环。
所以
where
等函数的文档。