2016-11-30 146 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'来做同样的事情。无论如何,数组通常更方便:) –