2017-08-25 41 views
0

我不知道會有什麼大名單,結構類似於['12,-1', '0.01,3']轉換成數組一樣嵌套(串)名單在Python

12 -1 
0.01 3 

下面的代碼做這個矩陣浮動的,但我不認爲它是高效的:

import numpy as nu 
list1 = ['12,-1', '0.01,3'] 
pp= nu.zeros(shape=(len (list1),2)) 
for i in range (len (list1)): 
    pp[i,0]= map (float,list1[i].split(','))[0] 
    pp[i,1]= map (float,list1[i].split(','))[1] 

有什麼建議嗎?

回答

0

使用numpy.split常規解決辦法:

import numpy as np 

list1 = ['12,-1', '0.01,3'] 
result = np.split(np.array([float(i) for _ in list1 for i in _.split(',')]), 2) 
print(result) 

輸出:

[array([ 12., -1.]), array([ 0.01, 3. ])] 
0

np.matrix有一個字符串輸入法,旨在模仿MATLAB風格:

In [1269]: alist = ['12,-1', '0.01,3'] 
In [1270]: np.matrix(';'.join(alist)) 
Out[1270]: 
matrix([[ 1.20000000e+01, -1.00000000e+00], 
     [ 1.00000000e-02, 3.00000000e+00]]) 
In [1271]: _.A 
Out[1271]: 
array([[ 1.20000000e+01, -1.00000000e+00], 
     [ 1.00000000e-02, 3.00000000e+00]]) 

這是一個方便。我認爲解析涉及到類似於你所做的事情 - 幾個級別的分割。

做我們自己的分裂:

In [1273]: np.array([line.split(',') for line in alist]) 
Out[1273]: 
array([['12', '-1'], 
     ['0.01', '3']], 
     dtype='<U4') 

如果我們指定dtypenp.array將轉換爲字符串彩車我們:

In [1274]: np.array([line.split(',') for line in alist],float) 
Out[1274]: 
array([[ 1.20000000e+01, -1.00000000e+00], 
     [ 1.00000000e-02, 3.00000000e+00]]) 

列表內涵創建一個列表的列表:

In [1275]: [line.split(',') for line in alist] 
Out[1275]: [['12', '-1'], ['0.01', '3']] 
0

一個好的解決方案是

import numpy as np 

list1 = ['12,-1,2', '0.01,3,4','-2,3,4'] 
float_list = np.array([element for row in list1 for element in row.split(',')], dtype=np.float) 
matrix = np.split(float_list, len(list1)) 
print(matrix)