1

我正在实现一个使用 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 循环并不是 Python 式的,但这是我在使用 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]]
4

2 回答 2

4

这样做可以显着提高性能:

for word in allwords:
    wordarrays[word] /= 10.
于 2013-07-02T09:24:50.350 回答
1

我认为这是因为您要除以整数,因此正在执行整数算术。尝试更改1010.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.0
于 2013-07-02T08:54:04.663 回答