使用随机值生成Numpy数组时的奇怪行为

时间:2016-11-22 22:01:10

标签: python arrays numpy scipy

使用此代码,我想以Numpy数组格式生成一些小数字:

np.random.seed(1)
syn0 = 2*np.random.random((315,1))-1

这给了我这样的结果:

[[-0.16595599]
 [ 0.44064899]
 [-0.99977125]
 [-0.39533485]
 [ 0.70648822]
 [-0.81532281]
 [-0.62747958]
 [ 0.30887855]
 [-0.20646505]
 [ 0.07763347]
 [-0.16161097]
      .
      .
      .

但是当我将行数改为316和更高时:

np.random.seed(1)
syn0 = 2*np.random.random((316,1))-1

然后我得到这个数字格式的结果(幂表示法):

[[ -1.65955991e-01]
 [  4.40648987e-01]
 [ -9.99771250e-01]
 [ -3.95334855e-01]
 [ -7.06488218e-01]
 [ -8.15322810e-01]
 [ -6.27479577e-01]
 [ -3.08878546e-01]
 [ -2.06465052e-01]
 [  7.76334680e-02]
 [ -1.61610971e-01]
 [  3.70439001e-01]
         .
         .
         .

我知道这是电源符号格式,但为什么会这样?我不需要这种格式。为什么会出现这种奇怪的行为?

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.array2string打印特定数组而无需科学记数法:

print(np.array2string(x, suppress_small=True))

默认情况下,对于所有打印都不使用科学记数法,请使用numpy.set_printoptions

np.set_printoptions(suppress=True)

至于为什么会发生这种情况 - 在打印浮点数组时,默认行为是在以下情况下使用科学记数法:

  • 要打印的最小(绝对非零)值小于0.0001;或
  • 最大值(绝对非零值)与最小值(绝对非零值)之比大于1000

如果将suppress_small传递给array2string(或suppressset_printoptions

,则会停止此行为

答案 1 :(得分:1)

您可以通过更改numpy的打印选项来关闭科学记数法:

np.set_printoptions(suppress=True)

syn0
>>> array([[-0.00083166],
           [ 0.45717134],
           [-0.58361112],
           [-0.50393288],
           [ 0.70334375],
           [-0.16830256],
           [ 0.23337013],
           [-0.53266772],
              ....