使用numpy在python中存储可变数量的矩阵

时间:2017-09-16 22:17:20

标签: python matlab numpy matrix

我正在尝试使用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有不同的方式来处理它?<​​/ p>

2 个答案:

答案 0 :(得分:3)

在MATLAB代码中,您使用的是Cell数组。单元格是通用容器。 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会很有帮助。

答案 1 :(得分:1)

这样的事情怎么样:

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)