我有100个大型数组,每个数组250,000个元素。我想找到在这些数组中找到的通用值。我知道不会在所有100个数组中找到值,但是会在多个数组中找到少量值(我怀疑是10%至30%)。我想找到在这些阵列中频率最高的值。 (观点:数组没有重复项)
我知道我可以遍历数组并最终找到它们,但这需要一段时间。我也知道np.intersect1d
函数,但是我只给出在所有数组中都可以找到的值,而我正在寻找的值只能在100个数组中的20个左右。
我最好的选择是使用np.intersect1d
函数并遍历数组的所有可能组合,这肯定会花费一些时间,但不要仅仅遍历所有250,000 x 100的值。
示例:
array_1 = array([1.98,2.33,3.44,,...11.1)
array_2 = array([1.26,1.49,4.14,,...9.0)
array_2 = array([1.58,2.33,3.44,,...19.1)
array_3 = array([4.18,2.03,3.74,,...12.1)
.
.
.
array_100= array([1.11,2.13,1.74,,...1.1)
在所有100个中没有值,是否可以在30个不同的数组中找到一个值?
答案 0 :(得分:1)
您可以将np.unique
与return_counts
关键字一起使用,也可以使用香草Python Counter
。
如果您可以将阵列连接成一个250k x 100的整体结构,或者甚至将它们串接成另一个,则第一种方法有效:
unq, counts = np.unique(monolith, return_counts=True)
ind = np.argsort(counts)[::-1]
unq = unq[ind]
counts = counts[ind]
这将为您提供一个包含所有唯一值及其出现频率的数组。
如果阵列必须保持分开,请使用collections.Counter
完成相同的任务。在下面,我假设您有一个包含数组的列表。拥有一百个单独命名的变量将是毫无意义的:
c = Counter() 对于数组中的arr: c.update(arr)
现在c.most_common
将为您提供最常见的元素及其数量。