2017-10-07 65 views
-3

我有以下的文本文件,file.txt的3行4列:重塑:不能重塑尺寸x的陣列分成形狀(X,Y)

0.0 0.0 0.0 
0.0 0.0 10.0 
15 10 2001 2995 

我使用NP .loadtxt將其作爲數組讀取。 Loadtxt將其作爲一維數組讀取,我想將它轉換回3x4陣列,它的結構與文本文件中的結構相同。我試過

file = sys.argv[1] #I'm just reading it from the command line when executing the program 
data = np.loadtxt(file, delimiter='\t', dtype = str) 
print(data.shape, data) 
data = data.reshape(3,4) 

但收到以下錯誤:

(3,) 
['0.0 0.0 0.0' '0.0 0.0 10.0' '15 10 2001 2995'] 
ValueError: cannot reshape array of size 3 into shape (3,4) 

我已經編輯了形狀和錯誤之間的非相關信息。我怎樣才能將這個文本文件重塑爲3x4數組?它不必通過加載文本。我也嘗試使用np.genfromtxt以及無濟於事。

+0

爲什麼你使用'delimiter =',''爲一個沒有用','分隔的文件? – user2357112

+0

爲什麼你斷言輸入結構是3x4? – user2357112

+0

修正了分隔符。這就是我在文本編輯器中打開文件時的樣子。 – dward4

回答

1

你不需要reshape數據,從,loadtxt功能只是改變分隔空間' '

data = np.loadtxt(file, delimiter=' ', dtype = str) 

這實際上加載數據與缺少的元素出現的字符串數組3x4的作爲空字符串''。然後,您可以用零使用

np.place(data, data == '', '0.0') 

替換它並使用轉換爲浮動:

data = np.asarray(data, dtype = float) 
+0

不幸的是,這不是一個錯誤。這些只是我想的空白。我給出的文本文件在那裏沒有值。我不確定如何在我的示例中正確添加這些內容。 – dward4

+1

那麼你的數據是怎樣的呢?我的意思是當我在OP中運行你的代碼時,它給了我一個整形錯誤,因爲輸入數組是一個3元素的數組,每個元素都是你的樣本輸入的一行。 – atru

+0

是的,這一定是問題所在。我很抱歉,我在這方面有點新鮮。正在尋找將該文本轉換爲3,4形狀的numpy數組。 – dward4

2

大熊貓是與缺少項讀取數據極大。如果你沒有熊貓,你可以與安裝:

pip install pandas 

在此之後,你可以做使用pd.read_table讀取數據。缺少的值將被替換爲NaN s。

import pandas as pd 
x = pd.read_table('data.txt', sep='\s+', 
      header=None, names=range(4)).values 

print(x) 
array([[ 0.,  0.,  0., nan], 
     [ 0.,  0., 10., nan], 
     [ 15., 10., 2001., 2995.]])