【发布时间】:2020-11-12 12:54:42
【问题描述】:
我有三个数组,这样:
Data_Arr = np.array([1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5])
ID_Arr = np.array([1, 2, 3, 4, 5])
Value_Arr = np.array([0.1, 0.6, 0.3, 0.8, 0.2])
我想使用 ID 中的索引位置创建一个具有 Data 维度的新数组,但其中每个元素都来自 Values。到目前为止,我有这个循环,但它非常慢,因为我的数据数组非常大:
out = np.zeros_like(Data_Arr, dtype=np.float)
for i in range(len(Data_Arr)):
out[i] = Values_Arr[ID_Arr==Data_Arr[I]]
是否有更 Pythonic 的方式来执行此操作并避免此循环(不必使用 numpy)?
实际数据如下:
Data_Arr = [ 852116 852116 852116 ... 1001816 1001816 1001816]
ID_Arr = [ 852116 852117 852118 ... 1001814 1001815 1001816]
Value_Arr = [1.5547194 1.5547196 1.5547197 ... 1.5536859 1.5536858 1.5536857]
形状是:
Data_Arr = (4021165,)
ID_Arr = (149701,)
Value_Arr = (149701,)
【问题讨论】:
-
我不会提供这个作为答案,因为它使用更多内存并且可能不会更快,但我注意到
d = dict(zip(ID_Arr, Value_Arr)); print([d[i] for i in Data_Arr])将是等效的(尽管不使用 numpy)。跨度>
标签: python numpy loops indexing