例如,如果我有:
import numpy as np
A = np.array([[2,3,4],[5,6,7]])
Run Code Online (Sandbox Code Playgroud)
我想检查以下列表是否与数组包含的列表之一相同:
B = [2,3,4]
Run Code Online (Sandbox Code Playgroud)
我试过了
B in A #which returns True
Run Code Online (Sandbox Code Playgroud)
但是以下也返回True,这应该是假的:
B = [2,2,2]
B in A
Run Code Online (Sandbox Code Playgroud)
尝试这种生成器理解.内置any()短路,因此您不需要额外的评估.
any(np.array_equal(row, B) for row in A)
Run Code Online (Sandbox Code Playgroud)
目前,np.array_equal还没有实现内部短路.在另一个问题中,讨论了实现这一目标的不同方式对性能的影响.
正如@Dan在下面提到的那样,广播是解决这个问题的另一种有效方式,而且通常(尽管不总是)更好的方式.对于一些粗略的启发式方法,以下是您可能希望在两种方法之间进行选择的方法.与任何其他微优化一样,对结果进行基准测试.
B==A)A是B,我们没有看的其余部分)A(例如,如果我们不希望B不在其中A),广播几乎总是更快(不一定总是快得多,见下一点)| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |