我正在尝试使用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>
答案 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)