错误:具有多个元素的数组的真值是不明确的

时间:2014-11-10 11:26:52

标签: python numpy

有两个数组:a=np.array([1,2,3,4,5])b=np.array([1,2,3,4,5,6,7,8,9]) 创建一个包含其他两个数组的新数组:c=np.array([[a],[b]])

我们希望在c中以最小值(例如值3)为两个数组中的每一个进行阈值处理,并在最后得到:d=[[4,5],[4,5,6,7,8,9]]

按照这种方式:

d=[]
p=-1
for i in range(0,1):
    p=p+1
    d[p]=c[i][(c[i]>3)]]

给出标题错误中提到的内容。 理解原因会很高兴。

1 个答案:

答案 0 :(得分:2)

问题是您在[]中添加了额外级别的c,因此您应该访问c[i]而不是仅访问c[i][0]

>>> for x in c:
...     print x
...     
[array([1, 2, 3, 4, 5])] 
[array([1, 2, 3, 4, 5, 6, 7, 8, 9])]

c[i]替换c[i][0]将修复您的代码,并且您也无法将任何内容分配给空列表,因此请使用追加调用替换d[p]

>>> d = []
>>> for i in range(len(c)):
    d.append(c[i][0][c[i][0]>3])
...     
>>> d
[array([4, 5]), array([4, 5, 6, 7, 8, 9])]

#or simply:
>>> [x[0][x[0]>3] for x in c]
[array([4, 5]), array([4, 5, 6, 7, 8, 9])]

更改c的初始化:

>>> c = np.array([a, b])
>>> [x[x>3] for x in c]
[array([4, 5]), array([4, 5, 6, 7, 8, 9])]