在 numpy 数组之间映射值并对其进行分类

Mapping values between numpy arrays and categorizing it

python新手! 一个包含 1000 个元素的 numpy 数组 A 由 -100+100 之间的固定值组成。这 201 个值只是类别。另一个 numpy 数组 B 具有 A 的每个类别的值的近似值。A 和 B 的长度相同。 例如A=[-100, -100, -88, 87, 85, 32, 32, 32]和对应 B=[-100.3, -100.1, -86.5, 87.3, 85.5, 32.6,32.1,32.5]。我想为每个类别获取相应的近似数据。在上面的例子中

for -100:-100.3, -100.1  
for 32:32.1,32.6,32.5

我似乎无法使用字典和压缩

你正在考虑字典和 zip 的好卡车。 您真正想要的是遍历 A 唯一值并将值附加到具有这些值键的字典中。使用列表理解,它几乎可以是一行。例如:

A = [-100, -100, -88, 87, 85, 32, 32, 32]
B = [-100.3, -100.1, -86.5, 87.3, 85.5, 32.6, 32.1, 32.5]

values_dict = {i: [] for i in set(A)}  # Initialize dictionary with empty lists
[values_dict[pair[0]].append(pair[1]) for pair in zip(A, B)]  # Append values to corresponding key.

print(values_dict)

打印:

{32: [32.6, 32.1, 32.5], -88: [-86.5], 85: [85.5], 87: [87.3], -100: [-100.3, -100.1]

如果您进入 pandas 数据框,这会很容易。

# A=[-100, -100, -88, 87, 85, 32, 32, 32] 
# B=[-100.3, -100.1, -86.5, 87.3, 85.5, 32.6,32.1,32.5]

def retrieve_values(A, B):
   dict_values = {}
   df = pd.DataFrame({'A':A, 'B':B}).set_index("A")
   grouped = df.groupby('A')
   for index, val in grouped:
     dict_values[val.index[0]] = np.squeeze(val.values,axis=1)
   return dict_values

Output:

{-100: array([-100.3, -100.1]),
 -88: array([-86.5]),
  32: array([32.6, 32.1, 32.5]),
  85: array([85.5]),
  87: array([87.3])}