相关疑难解决方法(0)

比较两个numpy数组的相等性,逐个元素

比较两个numpy数组是否相等的最简单的方法是什么(其中相等定义为:对于所有索引i,A = B iff A[i] == B[i])?

简单地使用==给我一个布尔数组:

 >>> numpy.array([1,1,1]) == numpy.array([1,1,1])

array([ True,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

我是否必须and使用此数组的元素来确定数组是否相等,还是有更简单的比较方法?

python arrays numpy elementwise-operations

203
推荐指数
6
解决办法
30万
查看次数

Numpy与直蟒不同的地方?

伙计们,

是否存在Numpy与python不同的陷阱集合,这些点令人困惑且花费时间?

"那一刻我永远不会忘记的恐怖!"
"不过,你会这样说的,"女王说,"如果你不做备忘录的话."

例如,NaN在任何地方总是麻烦.如果您可以在不运行的情况下解释这一点,请给自己一点 -

from numpy import array, NaN, isnan

pynan = float("nan")
print pynan is pynan, pynan is NaN, NaN is NaN
a = (0, pynan)
print a, a[1] is pynan, any([aa is pynan for aa in a])

a = array(( 0, NaN ))
print a, a[1] is NaN, isnan( a[1] )
Run Code Online (Sandbox Code Playgroud)

(我不是那么笨拙,在那里做了很多好工作,只是认为常见问题解答或问题的维基会很有用.)

编辑:我希望收集六个陷阱(人们学习Numpy的惊喜).
然后,如果有共同的问题或更好的常见解释,我们可以谈谈将它们添加到社区Wiki(在哪里?)看起来我们到目前为止还不够.

python numpy

27
推荐指数
8
解决办法
1万
查看次数

在单元测试中比较numpy浮点数组

实现比较两个numpy浮点数组的unittest的最佳方法是什么.

我已经尝试过unittest.assertEqual()但是对于float数组不起作用,因为float永远不会100%相等.我不能使用assertAlmostEqual,因为它测试圆(浮点)相等...

有没有人实现这样的事情

self.assertFloatArrayEqual(array1, array2, msg = "array are not equal")
Run Code Online (Sandbox Code Playgroud)

谢谢

python unit-testing numpy python-2.7

7
推荐指数
3
解决办法
6030
查看次数

为什么Python没有"__req__"(反映相等)方法?

我有一个小助手班:

class AnyOf(object):
    def __init__(self, *args):
        self.elements = args
    def __eq__(self, other):
        return other in self.elements
Run Code Online (Sandbox Code Playgroud)

这让我做了甜蜜的魔术:

>>> arr = np.array([1,2,3,4,5])
>>> arr == AnyOf(2,3)
np.array([False, True, True, False, False])
Run Code Online (Sandbox Code Playgroud)

无需使用列表理解(如np.array(x in (2,3) for x in arr).

(我维护一个让(可信)用户输入任意代码的用户界面,并且a == AnyOf(1,2,3)比非技术精明用户的列表理解更加可口.)

然而!

这只适用于一种方式!例如,如果我这样做,AnyOf(2,3) == arr那么我的AnyOf类的__eq__方法永远不会被调用:相反,NumPy数组的__eq__方法被调用,在内部(我会假设)调用其__eq__所有元素的方法.

这让我想知道:为什么Python不允许右侧等效__eq__?(大致相当于像__radd__,__rmul__等等的方法.)

python numpy python-datamodel python-internals

6
推荐指数
2
解决办法
341
查看次数

模拟:assert_called_once_with一个numpy数组作为参数

我在类中有一个方法,我想unittest使用Python 3.4 使用框架进行测试.我更喜欢使用a Mock作为类的对象来测试,正如Daniel Arbuckle的Learning Python Testing中所解释的那样.

问题

这就是我要做的:

class Test_set_initial_clustering_rand(TestCase):

    def setUp(self):
        self.sut = Mock()

    def test_gw_01(self):
        self.sut.seed = 1
        ClustererKmeans.set_initial_clustering_rand(self.sut, N_clusters=1, N_persons=6)
        e = np.array([0, 0, 0, 0, 0, 0])
        self.sut.set_clustering.assert_called_once_with(e)
Run Code Online (Sandbox Code Playgroud)

这将检查函数set_clustering是否使用期望参数调用一次.框架尝试使用比较两个参数actual_arg == expected_arg.如果参数是一个numpy数组,则会出错.

Traceback (most recent call last):
  File "/Users/.../UT_ClustererKmeans.py", line 184, in test_gw_01
    self.sut.set_clustering.assert_called_once_with(e)
  File "/Users/.../anaconda/lib/python3.4/unittest/mock.py", line 782, in assert_called_once_with
    return self.assert_called_with(*args, **kwargs)
  File "/Users/.../anaconda/lib/python3.4/unittest/mock.py", line 769, in assert_called_with
    if expected != actual:
  File "/Users/.../anaconda/lib/python3.4/unittest/mock.py", line 2001, in __ne__ …
Run Code Online (Sandbox Code Playgroud)

python unit-testing numpy mocking

4
推荐指数
1
解决办法
1879
查看次数