2013-07-02 65 views
1

我正在實現一個使用Python Numpy包的程序。我試圖修改一個數組的元素,這樣我只需取elem[i][j]並將其設置爲elem[i][j]/10。不過,我在操作後將元素設置爲0的情況下不斷得到某種截斷。這裏是我的代碼:Numpy截斷?

for word in allwords: 
    for x in xrange(wordarrays[word].shape[0]): 
     for y in xrange(wordarrays[word].shape[1]): 
      wordarrays[word][x][y]=wordarrays[word][x][y]/10 

在我的代碼wordarrays是從字符串到數組的字典。當我簡單地打印wordarrays [word] [x] [y]/10截斷不是一個問題,並且浮點除法按預期進行。我檢查過,數組都有dtype = float64,所以不應該是問題。我也嘗試通過使用nditer

這裏介紹的方法修改陣列這是什麼導致這種截斷? 感謝您的幫助!


給出一些關於我的異常輸出的更多細節。分割之前,是wordarray [「陳」]中的條目,如下所示:

[[2. 3.] 
[4. 1.]] 

由10(或10.0)我得到這個對於相同的陣列劃分後:

[[1.01000000e-04 1.20000000e-05] 
[1.11001000e-01 1.00000000e-06]] 

哪個沒有按似乎沒有任何意義。我認識到,雙循環不是pythonic,但這是我認爲與np.nditer迭代無效時嘗試的方法。爲了解決一些評論,我確實嘗試了除以10和10.0。結果是一樣的。

此外,當我無需更換陣列的條目執行相同的操作,只是打印的劃分,即:

for word in allwords: 
    for x in xrange(wordarrays[word].shape[0]): 
    for y in xrange(wordarrays[word].shape[1]): 
      print wordarrays[word][x][y]/10 

我得到的期望是什麼,即:

[[0.2 0.3] 
[0.4 0.1]] 
+1

你是什麼意思,截斷?你能說明你的問題嗎?你確定它不是一個顯示問題(即底層數據實際上沒有被截斷)嗎? –

+2

注意:使用循環並不是真正的numpythonic,你應該可以用'wordarrays [word]/= 10'獲得相同的結果(假設就地分區對你的'dtype'起作用) –

+0

你確定'allwords'包含唯一的單詞元素? – heltonbiker

回答

1

我假設這是因爲你除以一個整數,所以整數運算正在執行。嘗試更改1010.0

e.g

for word in allwords: 
    for x in xrange(wordarrays[word].shape[0]): 
     for y in xrange(wordarrays[word].shape[1]): 
      wordarrays[word][x][y]=wordarrays[word][x][y]/10.0 
4

您可以顯著提高你的表現這樣做:

for word in allwords: 
    wordarrays[word] /= 10. 
+1

只需觀察一下這個技巧:每次在文字數字後加上一個小數點分隔符('.'),這使得python解釋器認爲它是一個「float」而不是一個整數,即使你不把一個隱含的' 0「小數點後的分隔符。 – heltonbiker