【问题标题】:Storing a variable amount of matrices in python using numpy使用 numpy 在 python 中存储可变数量的矩阵
【发布时间】:2017-09-16 22:17:20
【问题描述】:

我正在尝试使用 numpy 从 MatLab 重新创建一些代码,但我不知道如何存储可变数量的矩阵。在 MatLab 中,我使用了以下代码:

for i = 1:rows
    K{i} = zeros(5,4);  %create 5x4 matrix

    K{i}(1,1)= ET(i,1); %put knoop i in table
    K{i}(1,3)= ET(i,2); %put knoop j in table    

    ... *do some stuff with it*

end

我认为我需要做的是创建一个矩阵列表,但我只能在列表中存储单个数组,而不是矩阵。像这样的东西,但随后工作:

for i in range(ET.shape[0]):

   K[[i]] = np.zeros((5, 4))

   K[[i]][1, 2] = ET[i, 2]

我试过看 https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html 但这对我没有帮助。

查看一些类似的问题,一个肮脏的方法似乎使用全局变量,而不是更改变量名称,如下所示:

for x in range(0, 9):
     globals()['string%s' % x] = 'Hello'
     print(string3)

这是实现目标的最佳方式,还是有将多个矩阵存储在变量中的正确方式?还是我想要一些我不应该做的事情,因为 python 有不同的处理方式?

【问题讨论】:

  • “knoop”是什么意思?
  • 在 MATLAB 中,当您为新索引分配值时,单元格和矩阵会增长。 Python 并非如此。您必须附加到列表。您需要预先分配数组(如np.zeros),或使用concatenate 创建新数组。 (Python 字典会随着赋值而增长。)

标签: python matlab numpy matrix


【解决方案1】:

在 MATLAB 代码中,您使用的是元胞数组。单元格是通用容器。 Python 中的等价物是常规的 list - 不是 numpy 结构。您可以创建您的 numpy 数组,然后将它们存储在一个列表中,如下所示:

import numpy as np
array1 = np.array([1, 2, 3, 4])    # Numpy array (1D)
array2 = np.matrix([[4,5],[6,7]])  # Numpy matrix
array3 = np.zeros((3,4))           # 2D numpy array
array_list = [a1, a2, a3]          # List containing the numpy objects

因此您的代码需要修改为如下所示:

K = []
for i in range(rows):
    K.append(np.zeros((5,4)))  # create 5x4 matrix

    K[i][1,1]= ET[i,1]  # put knoop i in table
    K[i][1,3]= ET[i,2]  # put knoop j in table    

    ... *do some stuff with it*

如果您刚开始使用 Python 进行科学计算,article 会很有帮助。

【讨论】:

    【解决方案2】:

    这样的事情怎么样:

    import numpy as np
    
    myList = []
    for i in range(100):
        mtrx = np.zeros((5,4))
        mtrx[1,2] = 7
        mtrx[3,0] = -5
        myList.append(mtrx)
    

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2023-04-05
      • 2015-04-11
      • 2012-06-23
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多