numpy不断将零转换为非常小的数字和“-2147483648”

toe95027  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(137)

我有这个密码

import numpy
a=numpy.pad(numpy.empty([8,8]), 1, constant_values=1)
print(a)

50%的时候我执行它它打印一个普通的数组,50%的时候它打印这个

[[ 1.00000000e+000  1.00000000e+000  1.00000000e+000  1.00000000e+000
   1.00000000e+000  1.00000000e+000  1.00000000e+000  1.00000000e+000
   1.00000000e+000  1.00000000e+000]
 [ 1.00000000e+000  3.25639960e-265  2.03709399e-231 -7.49281680e-111
   9.57832017e-299  8.17611616e-093  9.57832017e-299  1.31887592e+066
  -2.29724802e+236  1.00000000e+000]
 [ 1.00000000e+000  5.11889256e-014 -2.29724802e+236  2.19853714e-004
  -2.29724802e+236 -9.20964279e+232  2.37057719e+043  1.48921177e+048
   5.29583156e-235  1.00000000e+000]
 [ 1.00000000e+000  6.37391724e+057  5.68896808e-235  2.73626021e+067
   6.08210460e-235  1.17578020e+077  6.66029790e-235  7.05235822e-235
   2.13106310e-308  1.00000000e+000]
 [ 1.00000000e+000  7.83852638e-235  2.13214956e-308  8.62479942e-235
   2.13323602e-308  9.41107246e-235  2.13432248e-308  1.61214828e+063
   1.35001671e-284  1.00000000e+000]
 [ 1.00000000e+000  7.20990215e-264  9.57831969e-299  5.06352214e+139
   3.18093720e+144  1.21642092e-234  1.25562635e-234  2.13866833e-308
   1.41045067e-234  1.00000000e+000]
 [ 1.00000000e+000  2.13975479e-308  1.56770528e-234  2.14084125e-308
   1.72495988e-234  2.14192771e-308  1.88221449e-234  2.14301418e-308
   2.03946910e-234  1.00000000e+000]
 [ 1.00000000e+000  2.14410064e-308  2.19672371e-234  2.14518710e-308
   2.35397832e-234  2.14627356e-308  1.61656736e+063  1.35004493e-284
   7.20998544e-264  1.00000000e+000]
 [ 1.00000000e+000  3.93674833e-241  7.20999301e-264  6.00700127e-246
   2.03709519e-231 -5.20176578e-111  9.57832021e-299  5.66452894e+075
  -2.29724802e+236  1.00000000e+000]
 [ 1.00000000e+000  1.00000000e+000  1.00000000e+000  1.00000000e+000
   1.00000000e+000  1.00000000e+000  1.00000000e+000  1.00000000e+000
   1.00000000e+000  1.00000000e+000]]

更糟糕的是,当我这样做的时候。

[[          1           1           1           1           1           1
            1           1           1           1]
 [          1           0           0           0 -2147483648           0
  -2147483648           0           0           1]
 [          1           0           0 -2147483648           0           0
            0           0 -2147483648           1]
 [          1           0           0           0           0 -2147483648
            0           0           0           1]
 [          1           0           0           0           0           0
  -2147483648           0           0           1]
 [          1           0           0 -2147483648           0           0
            0           0           0           1]
 [          1           0 -2147483648           0           0           0
  -2147483648           0 -2147483648           1]
 [          1           0 -2147483648 -2147483648           0 -2147483648
            0           0 -2147483648           1]
 [          1           0           0           0           0           0
            0           0           0           1]
 [          1           1           1           1           1           1
            1           1           1           1]]

在普通的Python 3.11和Anaconda 3.9上进行了尝试。
我在谷歌上搜索了一下,但是我找不到解决这个问题的方法,所以任何帮助都将非常感谢。帖子需要更多的文本,这样它就不是“主要是代码”,它可以让我发布它。我想知道是否有什么好的方法来解决我描述的问题。正如我所写的,我在两个不同版本的python上测试了它。不幸的是,两者都导致了同样的问题。

anauzrmj

anauzrmj1#

您正在使用numpy.empty,它是一个
给定形状、数据类型和顺序的未初始化(任意)数据的数组。对象数组将被初始化为None。
请参阅documentation
使用numpy.zerosnumpy.ones以正确初始化的数组开始。

lxkprmvk

lxkprmvk2#

问题在于一个空数组是用np.empty初始化的,我不是计算机及其工作原理方面的Maven,但我确实知道的是,当一个空数组被初始化时,分配一个存储器块,用于保存新数组的值。该存储器块可以包含先前初始化的值。基本上仍有一些1's和零。当你第一次改变np.pad中的值时,旧的内存会被覆盖。我认为你试图做的是np.zeros()。比较:``
`

>>> import numpy
>>> a = numpy.empty([2,2])
>>> a
array([[8.88913424e-317, 0.00000000e+000],
       [4.01601648e-212, 1.10215522e-317]])
>>> b = numpy.zeros([2,2])
>>> b
array([[0., 0.],
       [0., 0.]])
>>>

`

相关问题