我的问题是:我想创建一个布尔矩阵B,它包含True
矩阵a在向量v中包含值的任何地方。一个不方便的解决方案是:
import numpy as np
>>> A = np.array([[0,1,2], [1,2,3], [2,3,4]])
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4]])
>>> v = [1,2]
>>> B = (A==v[0]) + (A==v[1]) # matlab: ``B = ismember(A,v)``
array([[False, True, True],
[ True, True, False],
[ True, False, False]], dtype=bool)
如果a和v有更多的值,是否有一个更方便的解决方案?在
干杯!在
使用numpy基元:
对于非微小输入,首先将v转换为一个集合,以获得较大的加速。在
使用numpy.setmember1d公司名称:
^{pr2}$我知道的不多,这是一个原始的Python:
编辑:正如布鲁克斯·摩西(Brooks Moses)指出的,一些简单的时间安排似乎表明,这一点可能更好:
^{pr2}$唉,
setmember1d
因为它存在于numpy中,当任何一个数组有重复的元素时(就像A在这里所做的那样)。下载this版本,称之为扫描电镜在你的某处搜索路径,向其添加第一行import numpy as nm
,然后这将最终起作用:注意不同之处wrt@Aants的相似答案:这个版本的结果bool数组的第二行是正确的,而他的版本(使用作为numpy一部分的
setmember1d
)错误地将第二行作为allTrue
s相关问题 更多 >
编程相关推荐