如何在连接两个numpy数组时修复错误?

时间:2016-11-10 09:07:46

标签: python numpy

我正在尝试以下方法:

rands = np.empty((0, 10))
rand = np.random.normal(1, 0.1, 10)
rands = np.concatenate((rands,rand),axis=0)

这给了我以下错误:

ValueError: all the input arrays must have same number of dimensions

但为什么会出现这个错误?为什么我不能使用此命令将新行rand附加到矩阵rands中?

备注:

我可以修复'这可以通过使用以下命令:

rands = np.concatenate((rands,rand.reshape(1, 10)),axis=0)

但它看起来不再是pythonic,但是很麻烦...

也许有一个更好的解决方案,更少的括号和重塑......?

1 个答案:

答案 0 :(得分:3)

rands的形状为(0, 10)rand的形状为(10,)

In [19]: rands.shape
Out[19]: (0, 10)

In [20]: rand.shape
Out[20]: (10,)

如果尝试沿0轴连接,则rands(长度为0)的0轴与rand(长度为10)的0轴连接。 图示,它看起来像这样:

兰特:

|   |   |   |   |   |   |   |   |   |   |

兰特:

|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |

这两个形状不能很好地融合在一起,因为rands的1轴长度为10,rand缺少1轴。

要解决此问题,您可以将rand提升为形状为(1, 10)的2D数组:

In [21]: rand[None,:].shape
Out[21]: (1, 10)

所以rand中的10个项目现在沿着1轴布局。然后

rands = np.concatenate((rands,rand[None,:]), axis=0)

返回形状(1, 10)

的数组
In [26]: np.concatenate((rands,rand[None,:]),axis=0).shape
Out[26]: (1, 10)

或者,您可以使用row_stack而无需将rand提升为2D数组:

In [28]: np.row_stack((rands,rand)).shape
Out[28]: (1, 10)