Numpy截断?

2024-04-19 06:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个使用pythonnumpy包的程序。我试图修改数组的元素,这样我就只需取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']的条目如下:

^{pr2}$

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

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

这似乎没有任何意义。我认识到double for循环并不是那种python类型,但这是我在迭代时想尝试的方法np.N指示器没用。为了回答一些评论,我试着用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]]

Tags: 方法字符串代码in程序元素for数组
2条回答

我想这是因为你要除以一个整数,所以要执行整数运算。尝试将10更改为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.0

这样做可以显著提高您的绩效:

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

相关问题 更多 >