我有两个数组,一个是值列表,一个是与每个值对应的 ID 列表。有些 ID 有多个值。我想创建一个新数组,其中包含为每个 id 记录的最大值,该数组的长度等于唯一 id 的数量。
使用for
循环的示例:
import numpy as np
values = np.array([5, 3, 2, 6, 3, 4, 8, 2, 4, 8])
ids = np.array([0, 1, 3, 3, 3, 3, 5, 6, 6, 6])
uniq_ids = np.unique(ids)
maximums = np.ones_like(uniq_ids) * np.nan
for i, id in enumerate(uniq_ids):
maximums[i] = np.max(values[np.where(ids == id)])
print(uniq_ids)
print(maximums)
Run Code Online (Sandbox Code Playgroud)
[0 1 3 5 6]
[5. 3. 6. 8. 8.]
Run Code Online (Sandbox Code Playgroud)
是否可以对其进行矢量化以使其运行速度更快?我正在想象一种可以仅使用 NumPy 函数创建“最大值”数组的单行代码,但我无法想出任何可行的方法。