【发布时间】:2020-05-21 21:19:10
【问题描述】:
我有两个相同形状的 numpy 数组。一个包含我感兴趣的信息,另一个包含一堆可以用作掩码值的整数。
本质上,我想遍历每个唯一整数以获取数组的每个掩码,然后使用此掩码过滤主数组并找到过滤后数组的最大值。
为简单起见,假设数组是:
arr1 = np.random.rand(10000,10000)
arr2 = np.random.randint(low=0, high=1000, size=(10000,10000))
现在我正在这样做:
maxes = {}
ids = np.unique(arr2)
for id in ids:
max_val = arr1[np.equal(arr2, id)].max()
maxes[id] = max_val
我的阵列要大得多,而且速度非常慢,我正在努力寻找一种更快的方法来做到这一点......也许有某种我不知道的创造性方法,非常感谢任何帮助。
编辑
假设大多数 arr2 实际上是 0,我不关心 0 id,是否可以通过从搜索中删除整个块来加快速度??
即
arr2[:, 0:4000] = 0
只返回 ids > 0 的最大值??
非常感谢..
【问题讨论】:
-
您的实际用例是否只有 10 个标签?如果是这样,那么loop-one就没有那么糟糕了。
-
不,我有数千个......编辑了帖子以使其变得更糟:D
-
我添加了一个编辑,很抱歉现在在努力之后添加这个但是,假设 arr2 中的大多数值实际上是 0 而我不在乎 0,有没有办法加快它只是从搜索中删除那一大块数组?