Python与Matlab中的数组和矩阵

时间:2018-01-28 07:47:18

标签: python python-3.x matlab numpy

是否有更简洁的语法来堆栈数组/矩阵?在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]])

1 个答案:

答案 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