【问题标题】:How to store matrices within a matrix in Python like on MATLAB?如何像在 MATLAB 上一样在 Python 中的矩阵中存储矩阵?
【发布时间】:2021-03-18 19:46:30
【问题描述】:

我知道 MATLAB 具有将二维矩阵存储在数组单元格中的功能,但是如何在 Python 上做到这一点?我需要在 1X5 数组的每一列中存储 4X4 矩阵。这可能吗?谢谢

【问题讨论】:

  • 您尝试过什么了吗?老实说,这应该很简单。
  • 我真的找不到任何与我的场景类似的例子。我需要在一个 1X5 矩阵中存储 5 个 4X4 矩阵。这很简单吗?抱歉,我对 Python 还很陌生。
  • 很大程度上取决于你以后想用它做什么。通常,您只需要一个 (1, 5, 4, 4) 形数组 - numpy(如 np.matmul)中的大多数“矩阵”操作在最后两个维度上广播。
  • 可能是查找列表列表,或者嵌套的 numpy 数组

标签: python matlab numpy matrix


【解决方案1】:

虽然 MATLAB 矩阵接近于 numpy 数组,但 cell 的等价物是不明确的。

一个选项是列表,尤其是当单元格是 (1,5) 形状时,尺寸 1 维度只是 MATLAB 的“一切都是 2d”的产物。

另一个是对象 dtype 数组。像列表一样,此类数组的元素是对内存中其他对象的引用。这是scipy.io.loadmat 在加载 MATLAB .mat 文件时使用的内容。但是创建这样一个数组可能会很棘手,尤其是在所有组件数组都具有相同形状的情况下。

另一种选择是制作一个高维数组,例如(1,5,4,4)。曾经有一段时间 MATLAB 只允许 2d,但 numpy 从一开始就允许这样做。请记住在numpy 中,前导维度位于最外层(默认为“C”排序)。

In [407]: alist = [np.ones((2,2),int) for _ in range(3)]
In [408]: alist
Out[408]: 
[array([[1, 1],
        [1, 1]]),
 array([[1, 1],
        [1, 1]]),
 array([[1, 1],
        [1, 1]])]

In [409]: arr = np.array(alist)
In [410]: arr
Out[410]: 
array([[[1, 1],
        [1, 1]],

       [[1, 1],
        [1, 1]],

       [[1, 1],
        [1, 1]]])
In [411]: arr.shape
Out[411]: (3, 2, 2)

In [412]: arr1 = np.empty(3, object)
In [413]: arr1
Out[413]: array([None, None, None], dtype=object)
In [414]: arr1[:] = alist
In [415]: arr1
Out[415]: 
array([array([[1, 1],
       [1, 1]]), array([[1, 1],
       [1, 1]]),
       array([[1, 1],
       [1, 1]])], dtype=object)

【讨论】:

    【解决方案2】:

    我认为您可以为每个 4x4 矩阵构建数组并创建另一个矩阵,您可以在其中引用 5 个不同的 4x4 矩阵。

    a = np.array([[0,0,0,0],
                  [0,0,0,0],
                  [0,0,0,0],
                  [0,0,0,0]])
    

    根据您的要求创建 5 个不同的数组,然后最终将它们全部引用到一个数组中。

    mat = np.block([[a],[b],[c],[d],[e]])
    

    尝试类似的方法,您会发现预期的结果。请参阅 numpy 数组和块形式的文档。

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多