Numpy Truncation?

时间:2013-07-02 08:31:48

标签: python arrays numpy scipy

我正在实现一个使用Python Numpy包的程序。我正在尝试修改数组的元素,以便我只需要elem[i][j]并将其设置为elem[i][j]/10。但是,我继续得到某种截断,其中元素在操作后设置为0。这是我的代码:

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 ['chen']的条目如下:

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

除以10(或10.0)后,我得到同一个数组:

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

这似乎没有任何意义。我认识到双for循环不是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]]

2 个答案:

答案 0 :(得分:4)

您可以显着改善您的表现:

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

答案 1 :(得分:1)

我认为这是因为你要除以整数,因此正在执行整数运算。尝试将10更改为10.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