【问题标题】:Error: The truth value of an array with more than one element is ambiguous错误:具有多个元素的数组的真值不明确
【发布时间】:2015-01-06 16:40:02
【问题描述】:

有两个数组: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)]]

给出标题中提到的错误。 很高兴了解原因。

【问题讨论】:

  • 您的代码缩进不正确,请修正
  • @TimCastelijns 你的意思是我的循环不正确?
  • 很难分辨,因为它没有正确缩进

标签: python numpy


【解决方案1】:

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

>>> 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])]

【讨论】:

  • @Aswini 工作!谢谢。
  • @DimKoim 很高兴有帮助。
  • @Aswini 当我运行 [x[x>3] for x in c] 而不是 [x[0][x[0]>3] for x in c] 时发生同样的错误]。但是您在帖子开头解释了它,但没有完全理解。你能推荐我链接以便阅读和理解吗?
  • @DimKoim 当我使用[x[x>3] for x in c] 时,我以不同的方式初始化cc = np.array([a, b])。如果您也这样做,那么您将不会收到此类错误。
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 2019-03-19
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多