连接不同形状的数组

Posted

技术标签:

【中文标题】连接不同形状的数组【英文标题】:Concatenating arrays of different shapes 【发布时间】:2019-10-02 23:24:42 【问题描述】:

鉴于numpy 不同维度的数组,我想将它们连接起来。显然这是一个很常见的问题,但我找到的答案似乎与我的问题不符。

在一个小例子上尝试了几种不同的方法后,我仍然无法使其工作。我已经研究过Concat two arrays of different dimensions numpy 和How to unnest a nested list [duplicate]。我还尝试了附加和展平它。

import numpy as np

a = np.arange(9)
a = a.reshape((3,3))
b = []
b.append(a[0,:])
b.append(a[1,1:2])
b.append(a[2,2])
b = np.asarray(b).flatten()
print(b) # [array([0, 1, 2]) array([4]) 8]

总之,我总是收到一些错误消息,指出尺寸不匹配或类似情况。

【问题讨论】:

【参考方案1】:

所以b 是一个列表 - 有一个 (3,) 和 (1,) 数组,以及一个标量 (0d, ()):

In [76]: a=np.arange(9).reshape(3,3)                                            
In [77]: b = [a[0,:], a[1,1:2],a[2,2]]                                          
In [78]: b                                                                      
Out[78]: [array([0, 1, 2]), array([4]), 8]

但是你想要什么组合呢?

如果最后一项是数组(或列表),我们可以连接:

In [79]: b = [a[0,:], a[1,1:2],[a[2,2]]]                                        
In [80]: b                                                                      
Out[80]: [array([0, 1, 2]), array([4]), [8]]
In [81]: np.concatenate(b)                                                      
Out[81]: array([0, 1, 2, 4, 8])

hstackconcatenate 的封面,确保所有元素至少为 1d:

In [82]: b = [a[0,:], a[1,1:2],a[2,2]]                                          
In [83]: np.hstack(b)                                                           
Out[83]: array([0, 1, 2, 4, 8])

【讨论】:

以上是关于连接不同形状的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TensorFlow 连接两个具有不同形状的张量?

如何连接具有 2 个不同维度的 2d 张量

Numpy 将二维数组与一维数组连接起来

如何在pytorch中连接两个不同尺寸的张量

Numpy 数组:连接展平和添加维度

工业金属弹簧连接器