In [344]: b[0] = np.where(a==c[0])
TypeError: float() argument must be a string or a number, not 'tuple'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<ipython-input-344-b205dc5b1048>", line 1, in <module>
b[0] = np.where(a==c[0])
ValueError: setting an array element with a sequence.
4条答案
按热度按时间wsxa1bj11#
问题在于
b[i]= np.where(a == int(c[i]))
,它返回一个数组,在你的例子中只包含一个元素。然而,v也是一维的,你必须分配标量而不是数组。如果确定搜索只返回1个元素,可以执行b[i]= np.where(a == int(c[i]))[0]
camsedfj2#
你可以尝试将它附加到b,而不是替换它的值。
也可以尝试在for循环中使用if条件:)
4urapxun3#
问题出在您的阵列
b
上。因为它是一个数组,所以它不像列表那样灵活。由于np.where
语句有时会返回一个空数组,甚至可能是一个包含更多标量的数组,所以这有点问题。最好将b
定义为列表:只有当你完全确定你的
np.where
语句将返回一个且只有一个标量时,你才可以使用@Simon Hawe的解决方案。请注意,这将返回
a
的索引,其中语句为True!如果您想要值本身,则代码变为h43kikqp4#
我应该投票关闭它,因为你没有提供足够的调试信息,特别是没有完整的traceback。
但让我们看看你在做什么。在第一次迭代中:
注意
where
产生的内容。它是一个元组,而不是一个单一的数字(即使它只在True
上找到)。如果不清楚,请阅读**文档。当我们尝试将该值赋给
b
数组(具有float
dtype)的元素时:你收到完整的留言了吗?如果是这样,你为什么只引用最后一行?
虽然可以从
where
元组中提取[1]
,但对于其他迭代,结果可能为空-没有匹配!可以在列表中收集这些
where
的结果,但为什么呢?