3

我有一些代码,我想做的是:

>> x=np.zeros((40,2))
>> x[31]=(12,15)
>> y=x.copy()
>> y[31]=(12,4)

#the following behavior is correct, but the syntax is unwieldy with the
#conversions to float and list, quite annoying

>> e=[12.,15.] 
>> e in x.tolist()
True
>> e in y.tolist()
False

但是,在调试过程中,我观察到以下奇怪的行为:

>> e in x
True
>> e in y
True

虽然

>> f=(8,93)
>> f in x
False

我的问题是双重的:

a) numpy 在这里做什么来产生这个结果?

tolistb)除了像我在这里使用和浮点转换(不使用python级别的for循环)之外,还有其他方法可以完成此检查吗?这种设计不明显,不易维护。

4

1 回答 1

2

认为in会给你一个相当于np.any(y == e)自动广播维度的结果。如果您查看y == e(粘贴在此答案的底部),它只有一个True元素。比我更有知识的人会知道真正发生了什么。

可能有一种更清洁的方法,但我建议这样做而不是转换为列表:

>>> np.any(np.all(x == e, axis=-1))
True
>>> np.any(np.all(y == e, axis=-1))
False

输出y == e看起来像

>>> y == e
array([[False, False],
       ...
       [False, False],
       [ True, False],
       [False, False],
       ...
       [False, False]], dtype=bool)
于 2013-10-30T16:18:39.320 回答