2017-09-16 110 views
1

我想从使用numpy的MatLab中重新创建一些代码,并且我找不到如何存储可变数量的矩阵。在Matlab我用下面的代码:使用numpy在python中存储可变数量的矩阵

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 但它并没有帮助我。

通过有些simular问题寻找一个肮脏的方法似乎是使用全局变量,而不是改变变量名,如下所示:

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

这是我实现我的目标的最佳途径,或者是有将多个矩阵存储在变量中的正确方法?或者我想要的东西,我不应该这样做,因为蟒蛇有不同的方式处理它?

+0

“knoop”是什么意思? – littleO

+0

在为新的索引赋值时,MATLAB中的单元格和矩阵会增长。 Python的情况并非如此。你必须追加到列表。您需要预先分配数组(如'np.zeros'),或者使用'concatenate'来创建新数组。 (Python字典确实随着分配而增长。) – hpaulj

回答

3

在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是有帮助的。

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)