2017-09-16 75 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)