肯定是一个0d阵列是标量,但Numpy似乎并不这么认为......我错过了什么或者我只是误解了这个概念?
>>> foo = numpy.array(1.11111111111, numpy.float64)
>>> numpy.ndim(foo)
0
>>> numpy.isscalar(foo)
False
>>> foo.item()
1.11111111111
Run Code Online (Sandbox Code Playgroud) 我使用Python的unittest
模块,并想检查两个复杂的数据结构是否相等.对象可以是具有各种值的dicts列表:数字,字符串,Python容器(列表/元组/ dicts)和numpy
数组.后者是提出问题的原因,因为我不能这样做
self.assertEqual(big_struct1, big_struct2)
Run Code Online (Sandbox Code Playgroud)
因为它会产生一个
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
我想我需要为此编写自己的相等测试.它应该适用于任意结构.我目前的想法是递归函数:
arg1
到相应节点arg2
;ValueError
被抓住,会更深入,直到找到numpy.array
;看起来有点问题的是跟踪两个结构的"相应"节点,但也许这zip
就是我所需要的.
问题是:这种方法有更好(更简单)的替代方案吗?也许numpy
为此提供了一些工具?如果没有建议的替代方案,我将实施这个想法(除非我有一个更好的想法)并发布作为答案.
PS我有一种模糊的感觉,我可能已经看到了解决这个问题的问题,但我现在找不到它.
PPS另一种方法是遍历结构并将所有numpy.array
s 转换为列表的函数,但是这更容易实现吗?对我来说似乎一样.
编辑:子类化numpy.ndarray
听起来很有希望,但显然我没有将比较的两面硬编码到测试中.但其中一个确实是硬编码的,所以我可以:
numpy.array
;isinstance(other, SaneEqualityArray)
以isinstance(other, np.ndarray)
在jterrace的答案 ;我在这方面的问题是:
numpy
数组的结构).编辑2:我试了一下,(看似)工作实现在这个答案中显示 …
我正在做一个我优化一些值的程序.由于方程式,我的值有时是NaN
我的问题,一些条目是NaN.
我想知道是否有测试来检查它们的逻辑有效性,以便我可以跳过这些值并重试.
到目前为止,我已经尝试过检查
a==np.nan, a==nan, b=a a==b
Run Code Online (Sandbox Code Playgroud)
无济于事.
我希望你能帮帮我
谢谢
如果有人可以帮助我(并解释发生了什么),我将不胜感激.
这有效:
>>> from numpy import array
>>> a = array((2, 1))
>>> b = array((3, 3))
>>> l = [a, b]
>>> a in l
True
Run Code Online (Sandbox Code Playgroud)
但这不是:
>>> c = array((2, 1))
>>> c in l
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
我想要复制的行为是:
>>> x = (2, 1)
>>> y = (3, 3)
>>> l2 = …
Run Code Online (Sandbox Code Playgroud)