【发布时间】:2018-09-18 05:00:42
【问题描述】:
我有一个由 n 个 1x3 数组组成的 numpy 数组 A,其中 n 是 1x3 数组中元素可能组合的总数,其中每个元素的范围从 0 到 50。也就是说,
A = [[0,0,0],[0,0,1]...[0,1,0]...[50,50,50]]
和
len(A) = 50*50*50 = 125000
我有一个由 m 个 1x3 数组组成的 numpy 数组 B,其中 m = 1000 万,并且这些数组的值可以属于 A 所描述的集合。
我想统计每个组合在B中出现了多少次,即[0,0,0]出现在B中的次数,[0,0,1]出现的次数……[50,50,50]出现的次数。到目前为止,我有以下内容:
for i in range(len(A)):
for j in range(len(B)):
if np.array_equal(A[i], B[j]):
y[i] += 1
其中 y 跟踪第 i 个数组出现的次数。所以,y[0] 是 [0,0,0] 在 B 中出现的次数,y[1] 是 [0,0,1] 出现的次数...y[125000] 是 [50,50,50] 出现的次数等等。
问题是这需要很长时间。它必须检查 1000 万个条目,125000 次。有没有更快更有效的方法来做到这一点?
【问题讨论】:
-
有点挑剔:
0, ..., 50是 51 个数字,所以 len(A) 将是51^3。
标签: python arrays numpy combinations