我正在实现一个使用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]]
答案 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