相关疑难解决方法(0)

如何检查 numpy 数组的所有元素是否都在另一个 numpy 数组中

我有两个 2D numpy 数组,例如:

A = numpy.array([[1, 2, 4, 8], [16, 32, 32, 8], [64, 32, 16, 8]])

B = numpy.array([[1, 2], [32, 32]])

我想要拥有A可以从 的任何行中找到所有元素的所有行B。如果 的一行中有 2 个相同的元素B,则 from 的行也A必须至少包含 2 个。就我的例子而言,我想实现这一目标:

A_filtered = [[1, 2, 4, 8], [16, 32, 32, 8]]

我可以控制值表示,因此我选择了二进制表示只有一个位置的数字1(例如:0b000000010b00000010等...)这样我可以使用函数轻松检查所有类型的值是否都在行中np.logical_or.reduce(),但是我无法检查一行中相同元素的数量是否更大或相等A。我真的希望我可以避免简单的for循环和数组的深层复制,因为性能对我来说是一个非常重要的方面。

我怎样才能在 numpy 中以有效的方式做到这一点?


更新:

这里的解决方案可能有效,但我认为性能对我来说是一个大问题,它A可以很大(> 300000 行),也B可以中等(> 30 行):

[set(row).issuperset(hand) …

python arrays numpy vectorization

5
推荐指数
1
解决办法
598
查看次数

NumPy 检查二维数组是否是二维数组的子集

我想检查数组是否是数组b的子集a。子集我的意思是我想检查是否ba.

这是我的代码:

import numpy as np
a = np.array([[1,7,9],[8,3,12],[101,-74,0.5]])
b = np.array([[1,9],[8,12],[101,0.5]])
print a
print b
Run Code Online (Sandbox Code Playgroud)

这是输出

数组 a

[[   1.     7.     9. ]
 [   8.     3.    12. ]
 [ 101.   -74.     0.5]]
Run Code Online (Sandbox Code Playgroud)

数组 b

[[   1.     9. ]
 [   8.    12. ]
 [ 101.     0.5]]
Run Code Online (Sandbox Code Playgroud)

有没有办法检查 b 是否是 a 的子集?

编辑:附加信息:

根据下面的评论,我应该澄清一下,我需要知道数组 b 是否是数组 a 的子集 - 如果子集中缺少一个元素,那么我正在寻找一种方法来检查这一点。我不需要指示元素在子集中的哪个位置丢失,而只是知道它丢失了。如果可以提供有关缺失元素的其他信息,那么这将是一个奖励,但这不是硬性要求。很抱歉没有早点解决这个问题。

我将问题表述为子集的理由是,如果一个数组是另一个数组的子集,那么这对我来说意味着子集数组的所有值都存在于更大的数组中。

python arrays numpy python-2.7

2
推荐指数
1
解决办法
1858
查看次数

标签 统计

arrays ×2

numpy ×2

python ×2

python-2.7 ×1

vectorization ×1