我有一个m x 3
矩阵A
和它的行子集B
(n x 3
)。两者都是另一个大型4D矩阵的索引集;它们的数据类型是dtype('int64')
。我想生成一个布尔向量x
,其中x[i] = True
如果B
不包含行A[i,:]
。你知道吗
A
或B
中没有重复的行。你知道吗
我想知道在Numpy有没有一个有效的方法?我找到了一个有点相关的答案:https://stackoverflow.com/a/11903368/265289;但是,它返回实际的行(不是布尔向量)。你知道吗
可以将} 计算它们之间的
A
和B
视为两组XYZ数组,并使用^{euclidean distances
。我们对零距离感兴趣。这个距离计算应该是一个非常有效的实现,所以希望我们有一个有效的解决方案来解决我们的问题。所以,找到这样一个布尔输出的实现应该是这样的-样本运行-
除了使用^{} 而不是
np.setdiff1d
之外,您可以遵循jterrace's answer中所示的相同模式:收益率
您可以使用
assume_unique=True
(这可以加速计算),因为A
或B
中没有重复的行。你知道吗小心
A.view(...)
会引起如果
A.flags['C_CONTIGUOUS']
是False
(即如果A
不是C-连续数组)。 因此,通常我们需要在调用view
之前使用np.ascontiguous(A)
。你知道吗正如B.M.所建议的,您可以使用"void" dtype查看每一行:
这对于整数数据类型是安全的。但是,请注意
{as}查看后可能返回不正确的结果 使用float dtype。你知道吗
以下是一些建议方法的基准:
由于只有3列,一种解决方案是减少交叉列:
尽管这会创建一个
m x n
中间数组,但它可能不具有内存效率。你知道吗或者,如果值是索引,即非负整数,则可以使用^{} 将其缩减为一维数组。这是一种有效的算法,熊猫在内部用于
groupby
操作;唯一需要注意的是,您可能需要验证不会有任何整数溢出:相关问题 更多 >
编程相关推荐