我正在尝试以下方法:
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,但是很麻烦...
也许有一个更好的解决方案,更少的括号和重塑......?
答案 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)