2016-11-30 167 views
1

我已經從文件中讀取數據並將其存儲到一個矩陣(frag_coords):的Python - 分割矩陣數據轉換成單獨的列

frag_coords = 
[[ 916.0907976 -91.01391344 120.83596334] 
[ 916.01117655 -88.73389753 146.912555 ] 
[ 924.22832597 -90.51682575 120.81734705] 

... 
[ 972.55384732 708.71316138 52.24644577] 
[ 972.49089559 710.51583744 72.86369124]] 

type(frag_coords) = 
class 'numpy.matrixlib.defmatrix.matrix' 

由指定的列的重排的矩陣的時候,不具有任何問題。例如,下面的代碼工作得很好:

order = np.argsort(frag_coords[:,2], axis=0) 

我的問題是:

len(frag_coords[0]) = 1 

我需要單獨訪問的第一行的個別數字,我試圖分裂它,改造它變成了一個列表,並且一切似乎都返回3個數字而不是列,而是作爲len = 1的單個元素返回。我需要幫助!

回答

0

您的問題是您正在使用matrix而不是ndarray。你確定你想要嗎?

對於一個矩陣,索引第一行單獨導致另一個矩陣,行矩陣。檢查frag_coords[0].shape:它將是(1,3)。對於ndarray,它將是(3,)

如果你只需要指數的第一行,用兩個指標:

frag_coords[0,j] 

或者,如果你存儲行暫時只指數成其爲行矩陣:

tmpvar = frag_coords[0] # shape (1,3) 
print(tmpvar[0,2])  # for column 2 of row 0 

如果您不需要太多的矩陣操作,我建議您使用np.array s代替。您可以隨時將數據直接讀取到數組中,但是在給定點上,如果您願意,也可以使用np.array(frag_coords)來轉換現有矩陣。

+1

謝謝!我認爲我需要一個矩陣來執行我的計算(沒有什麼奇怪的,主要是座標轉換和旋轉),但我可以肯定會使用數組! – IsisDorus

+0

@IsisDorus我很高興我可以幫助:)對於Python版本3.5及更高版本,具有足夠新的numpy版本,可以使用「@」運算符進行矩陣乘法運算,這也適用於數組。否則,需要使用'numpy.dot'來做同樣的事情。無論如何,數組通常更方便:) –