是否有更简洁的语法来堆栈数组/矩阵?在MatLab中,你可以简单地做[x,y]水平叠加,[x; y]垂直堆叠,可以很容易地链接,例如[x,x; y,y];在python中,它似乎更乏味,见下文:
import numpy as np
x = np.array([[1, 1, 1], [1, 2, 3]])
y = x*10
np.vstack((x, y))
array([[ 1, 1, 1],
[ 1, 2, 3],
[10, 10, 10],
[10, 20, 30]])
np.hstack((x, y))
array([[ 1, 1, 1, 10, 10, 10],
[ 1, 2, 3, 10, 20, 30]])
np.vstack((np.hstack((x, x)), np.hstack((y, y))))
array([[ 1, 1, 1, 1, 1, 1],
[ 1, 2, 3, 1, 2, 3],
[10, 10, 10, 10, 10, 10],
[10, 20, 30, 10, 20, 30]])
答案 0 :(得分:2)
MATLAB有自己的解释器,因此它可以解释;
等以满足其需要。 numpy
使用Python解释器,因此不能使用或重用[],;
等基本语法字符。因此,基本数组构造函数包装一个嵌套的列表列表(将列表作为参数):
np.array([[1,2,3], [4,5,6]])
但是,嵌套可以传递到任何深度np.array([])
,np.array([[[[['foo']]]]])
,因为数组可以有0,1,2等维度。
MATLAB最初只有2d矩阵,但仍然不能有1或0d。
在MATLAB中,矩阵是基本对象(单元格和结构稍后出现)。在Python中,列表是基本对象(元组和词组紧随其后)。
np.matrix
采用模仿MATLAB语法的字符串参数。 np.matrix('1 2; 3 4')
。但是np.matrix
和原来的MATLAB一样固定在2d。
https://docs.scipy.org/doc/numpy/reference/arrays.classes.html#matrix-objects
https://docs.scipy.org/doc/numpy/reference/generated/numpy.bmat.html#numpy.bmat
但严重的是,谁使用1, 2; 3, 4
语法制作真实有用的矩阵?那些是玩具。如果我需要一个简单的例子,我更喜欢使用np.arange(12).reshape(3,4)
。
numpy
添加了np.stack
,它提供了将数组连接到新构造的更多方法。还有np.block
:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.block.html#numpy.block