通过Python字典连接numpy数组

时间:2019-08-26 01:06:55

标签: python numpy dictionary

我有一个Python字典列表。字典中的元素是numpy数组。例如:

out = []
import numpy as np
d = dict()
d["test1"] = np.random.rand(10,64,80)
d["test2"] = np.random.rand(5,64,80)
out.append(d)

d = dict()
d["test1"] = np.random.rand(13,64,80)
d["test2"] = np.random.rand(29,64,80)
d["test3"] = np.random.rand(30,64,80)
out.append(d)

d = dict()
d["test1"] = np.random.rand(2,64,80)
d["test2"] = np.random.rand(27,64,80)
d["test3"] = np.random.rand(25,64,80)
out.append(d)

现在,我想按列表中出现的顺序连接所有具有相同键的numpy数组。这意味着最终的字典应如下所示:

final = dict()
final["test1] = np.concatenate((out[0]["test1"], out[1]["test1"], out[2]["test1"]), axis=0)
final["test2] = np.concatenate((out[0]["test2"], out[1]["test2"], out[2]["test2"]), axis=0)
final["test3] = np.concatenate((out[1]["test3"], out[2]["test3"]), axis=0)

我不知道列表中的元素数量。我怎样才能做到这一点?由于numpy数组很大,因此最好以减少使用的内存量的方式来实现。

1 个答案:

答案 0 :(得分:0)

您可以循环out列表的每个字典,并合并所有用numpy数组填充字段的所有字典。 例如

final = {
   k: np.concatenate([dct[k] for dct in out if dct.get(k)], axis=0)
   for k in ("test1", "test2", "test3",)
}