2 回答
TA贡献1799条经验 获得超6个赞
您不能拥有一个维度长度可变的数组。a和b很可能是列表的列表,而不是数组。您可以将列表理解与 zip 一起使用:
np.array([x+y for x,y in zip(a,b)])
编辑:或根据提供的注释,如果a和b是数组列表:
np.array([np.vstack((x,y)) for x,y in zip(a,b)])
您的示例的输出如下所示:
[[[ 7. 2. 3.]
[ 1. 2. 9.]
[ 1. 2. 3.]
[ 8. 0. 3.]
[ 1. 7. 3.]]
[[ 1. 2. 3.]
[ 3. 9. 0.]
[ 2. 2. 3.]
[ 8. 1. 3.]
[ 0. 2. 3.]]
[[ 0. 2. 7.]
[ 1. nan 3.]
[10. 0. 3.]
[ 0. nan 9.]
[10. nan 3.]]
[[10. 0. 3.]
[nan 9. 9.]
[10. nan 3.]
[ 0. 2. nan]
[ 1. nan 3.]]
[[ 8. 2. 0.]
[ 2. 2. 3.]
[ 8. 1. 3.]
[ 1. 2. 3.]
[ 1. 2. nan]]
[[ 0. 2. 3.]
[ 1. 2. 9.]
[ 1. 2. 3.]
[ 1. 0. 3.]
[ 1. 2. 3.]]]
TA贡献1868条经验 获得超4个赞
要执行串联,请运行:
result = np.concatenate([a, b], axis=1)
为了测试这段代码,我创建了a和b:
a = np.stack([ np.full((2, 3), i) for i in range(1, 6)], axis=1)
b = np.stack([ np.full((2, 3), i + 10) for i in range(1, 4)], axis=1)
所以它们包含:
array([[[1, 1, 1], array([[[11, 11, 11],
[2, 2, 2], [12, 12, 12],
[3, 3, 3], [13, 13, 13]],
[4, 4, 4],
[5, 5, 5]], [[11, 11, 11],
[12, 12, 12],
[[1, 1, 1], [13, 13, 13]]])
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]]])
它们的形状是:(2, 5, 3)和(2, 3, 3)
我的串联结果是:
array([[[ 1, 1, 1],
[ 2, 2, 2],
[ 3, 3, 3],
[ 4, 4, 4],
[ 5, 5, 5],
[11, 11, 11],
[12, 12, 12],
[13, 13, 13]],
[[ 1, 1, 1],
[ 2, 2, 2],
[ 3, 3, 3],
[ 4, 4, 4],
[ 5, 5, 5],
[11, 11, 11],
[12, 12, 12],
[13, 13, 13]]])
形状是(2, 8, 3),正如它应该的那样。
我尝试了您评论中的代码。执行后a = list((map(lambda i: a[:i], range(1,a.shape[0]+1)))),结果是:
[array([[1, 1]], dtype=int64),
array([[1, 1],
[1, 1]], dtype=int64),
array([[1, 1],
[1, 1],
[1, 1]], dtype=int64),
array([[1, 1],
[1, 1],
[1, 1],
[1, 1]], dtype=int64),
array([[1, 1],
[1, 1],
[1, 1],
[1, 1],
[1, 1]], dtype=int64),
...
所以a是不同大小的数组的列表。
您构建数据的方式有问题。首先检查您的两个数组是否都是3-D的,并且它们的形状仅在轴 1 上有所不同。只有这样您才能在它们上运行我的代码。现在a和b都是普通的pythonic 列表,而不是Numpy数组!
添加回答
举报