Skip to main content
 首页 » 编程设计

python之如何在 python 中使用多个索引同时填充 numpy 数组

2025年05月04日12lautakyan007

我有一个列表列表如下,在每个列表中,第一个元素有 indexes,第二个元素有每个索引的 value(注意:每个元素在该列表是一个 numpy 数组)。

mylist = [[[1 2 4 5], [0.1 0.7 0.7 0.7]], [[0 3], [0.2 0.4]]] 

所以我的最终输出应该是这样的数组。

[0.2, 0.1, 0.7, 0.4, 0.7, 0.7] 

我事先知道数组的长度。所以,在上面的数组中,长度是 6。

所以,我定义了一个numpy数组如下

import numpy as np 
np.empty(6, dtype=object) 

我想知道是否可以在每次迭代时同时填充 numpy 数组,而不用一个一个地填充每个索引。

如果需要,我很乐意提供更多详细信息。

请您参考如下方法:

如果我正确理解 mylist 的结构,这应该可以工作:

>>> idcs, vals = np.hstack(mylist) 
>>> vals[idcs.argsort()] 
array([0.2, 0.1, 0.7, 0.4, 0.7, 0.7]) 

编辑:正如 Paul Panzer 在评论中指出的那样,排序操作是不必要的。如果您不使用大数据集,我怀疑您会看到差异,但这是另一种应该是线性时间的方法:

>>> idcs, vals = np.hstack(mylist) 
>>> out = np.zeros(len(idcs)) 
>>> out[idcs.astype(int)] = vals 
>>> out 
array([0.2, 0.1, 0.7, 0.4, 0.7, 0.7]) 

虽然我不太喜欢它,因为类型转换。

编辑:另一个,没有类型转换:

>>> idcs, vals = map(np.hstack, zip(*mylist)) 
>>> out = np.zeros(len(idcs)) 
>>> out[idcs] = vals 
>>> out 
array([0.2, 0.1, 0.7, 0.4, 0.7, 0.7])