我的代碼如下:
file_ = open('file.txt', 'r')
lines = file_.readlines()
data = []
for row in lines:
temp = row.split()
data.append(np.array(temp).astype(np.float64))
我想將陣列中的每個專案都轉換為浮動,除了最后一個,我想保留一個字串。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
不,沒有將同一陣列的元素轉換為不同型別的函式。與常規 Python 串列不同,numpy 陣列是同構的并且存盤具有固定物理記錄大小的元素,因此陣列的每個元素必須始終具有相同的型別。
您可以單獨處理字串并僅將數字部分決議為 numpy 陣列:
for row in lines:
temp = row.split()
numbers = temp[:-1]
stringbit = temp[-1]
data.append(np.array(numbers).astype(np.float64))
或者,如果您的資料非常一致并且每行始終具有相同的型別結構,您可以使用更復雜的 numpy dtype和numpy.genfromtext使每一行成為更大陣列的元素。
您可能還會發現pandas.DataFrame更適合處理此類異構資料。
一個具有有用細節的相關問題:NumPy array/matrix of mixed type
uj5u.com熱心網友回復:
您可以使用重新排列。
在您的行中是具有相似資料的記錄,您可以創建一個自定義 dtype 來執行您想要的操作。在這種情況下,對同構資料型別的要求是元素的數量是恒定的,并且最終字串中的字符數量有一個上限。
這是一個假設字串僅包含 ASCII 字符的示例:
max_len = 10
dtype = np.dtype([('c1', np.float_), ('c2', np.float_), ('c3', np.float_), ('str', f'S{max_len}')])
row = [(10.0, 1.2, 4.5, b'abc')]
result = np.array(row, dtype)
如果不想分別命名每個浮點列,可以將該欄位設為子陣列:
dtype = np.dtype([('flt', np.float_, 3), ('str', f'S{max_len}')])
row = [([10.0, 1.2, 4.5], b'abc')]
如果字串的長度未知,您可以在該欄位中使用物件 dtype 并簡單地存盤參考。
盡管這是可能的,但您可能會發現將浮點數加載到一個陣列中并將字串加載到另一個陣列中更簡單。我通常發現使用內置 dtype 的同構陣列比使用 recarray 更簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/316998.html
上一篇:繪制趨勢線Python
