我有一个列表列表如下,在每个列表中,第一个元素有 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])
我是一名优秀的程序员,十分优秀!