【问题标题】:Arrays and Matrix in Python vs MatlabPython与Matlab中的数组和矩阵
【发布时间】:2018-07-07 03:28:33
【问题描述】:

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

【问题讨论】:

  • 我不认为这是可能的,因为没有类似的 Python 语法
  • 你可能还想看看np.r_np.c_

标签: python python-3.x matlab numpy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多