2015-10-29 31 views
2

我有一個包含6列的矩陣tempsyntheticGroup2。我想將列(0,1,2,3,5)的值從float更改爲int。這是我的代碼:將矩陣的某些列從float轉換爲int

tempsyntheticGroup2=tempsyntheticGroup2[:,[0,1,2,3,5]].astype(int) 

,但它不能正常工作,我失去了其他列。

+0

您可以使用列表是其他列表的一個指標,但不是這樣。我認爲你的代碼有一個錯誤。你能分享整個矩陣嗎?你確定列表值是浮動的嗎?我在問,因爲列表[[0,1,2,3,5]]是整數。 –

+0

「tempsyntheticGroup2」的'dtype'是什麼?也是它的'形狀'? – hpaulj

+0

雖然技術上numpy數組可以包含異質類型的元素,如果其dtype爲'np.object',實際上這對於性能原因來說幾乎不是一個好主意。使用[結構化數組](http://docs.scipy.org/doc/numpy/user/basics.rec.html)或[pandas'DataFrame'](http://pandas.pydata .org/pandas-docs/stable/generated/pandas.DataFrame.html),儘管可能最直接的選擇是將需要不同dtype的列存儲在不同的數組中,並通過共同的行索引來尋址它們。 –

回答

1

我不認爲你可以有一些元素是一個整數數組numpy的,有些是浮動(只存在一個可能的dtype每個陣列)。但是,如果你只是想圓降低整數(同時保持所有元素爲浮動),你可以這樣做:

# define dummy example matrix 
t = np.random.rand(3,4) + np.arange(12).reshape((3,4)) 

array([[ 0.68266426, 1.4115732 , 2.3014562 , 3.5173022 ], 
     [ 4.52399807, 5.35321628, 6.95888015, 7.17438118], 
     [ 8.97272076, 9.51710983, 10.94962065, 11.00586511]]) 



# round some columns to lower int 
t[:,[0,2]] = np.floor(t[:,[0,2]]) 
# or 
t[:,[0,2]] = t[:,[0,2]].astype(int) 

array([[ 0.  , 1.4115732 , 2.  , 3.5173022 ], 
     [ 4.  , 5.35321628, 6.  , 7.17438118], 
     [ 8.  , 9.51710983, 10.  , 11.00586511]]) 

否則,你可能需要將原來的數組分成2個不同的陣列,包含列一個停留浮動,另一個包含成爲整數的列。

t_int = t[:,[0,2]].astype(int) 

array([[ 0, 2], 
     [ 4, 6], 
     [ 8, 10]]) 


t_float = t[:,[1,3]] 

array([[ 1.4115732 , 3.5173022 ], 
     [ 5.35321628, 7.17438118], 
     [ 9.51710983, 11.00586511]]) 

請注意,您必須相應地改變你的索引來訪問你的元素...