2012-12-08 283 views
3

此代碼設置爲讀取兩列數據,然後將第一列打印到第一個numpy數組中,然後將第二列打印到第二個numpy數組中。 將列表轉換爲numpy數組

def read2coldata(filename): 

    import numpy 
    b = [] 
    f = open(filename,"r") 
    lines = f.readlines() 
    f.close() 
    for line in lines: 
     a = line.split() 
     for i in a: 
      b.append(i) 
    return (numpy.array(b[::2]),numpy.array(b[1::2])) 

但是這給:

(array(['1.5', '8', '16', '17'], dtype='|S3'), array(['4', '5', '6', '6.2'], dtype='|S3')) 

如何擺脫dtype="|S3"部分見好就收:

(array(["1.5","8","16","17"], array(["4","5","6","6.2"]) 
+0

如果您將數組轉換爲浮點數,數據類型說明符將消失。考慮到你的字符串看起來像他們將需要轉換爲數值,你可能想看看。你可以使用'x.astype(float)'。 – Akavall

回答

5

dtype="S3"你不想「走開」。 當你打印一個numpy數組時,它會給你數據的類型。它不是數據的一部分,它是關於數據如何被程序存儲和理解的信息。

在你的例子中,你讀了數字,所以你可能想在計算或其他方面使用它們,在這種情況下,你會希望數據被理解爲數字(浮在你的情況下)。

目前他們被存儲爲字符串,這就是爲什麼你看到dtype="S3"這實際上意味着大小爲3或更小的字符串類型。 (IIRC)

我建議你給你一個替代函數:numpy.genfromtxt是一個函數,用於將數據從txt文件加載到numpy數組中。

該文檔相當不錯,如果花20分鐘的時間來了解參數,您會發現它非常有用。

array1 = numpy.genfromtxt('path_to_my_file.txt', usecols=0) 
array2 = numpy.genfromtxt('path_to_my_file.txt', usecols=1) 

這應該讓你開始。