2013-07-02 27 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