【问题标题】:Cannot understand the output of this code: python list to 1-d numpy array无法理解此代码的输出:python list to 1-d numpy array
【发布时间】:2020-10-21 00:07:08
【问题描述】:

我尝试创建将 python 列表转换为 numpy 数组,但得到的输出非常不直观。当然我做错了什么,但出于好奇,我想知道为什么我会得到这样的输出。 这是我的代码:

import numpy as np

# Exercise 2
a = [1, 5, 3, 6, 2]
b = np.ndarray(a)
print(b, b.dtype)

输出是

[[[[[0.00000000e+000 6.93284651e-310]
    [6.93284792e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]]

   [[6.93284744e-310 2.20882835e-314]
    [6.93284743e-310 6.93284743e-310]
    [6.93284743e-310 6.93284650e-310]
    [6.93284744e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]
    [6.93284744e-310 6.93284744e-310]]

   ... (12 more blocks similar to ones above)

   [[6.93284871e-310 6.93284871e-310]
    [6.93284745e-310 6.93284871e-310]
    [6.93284651e-310 6.93284871e-310]
    [6.93284745e-310 6.93284871e-310]
    [6.93284871e-310 6.93284745e-310]
    [6.93284727e-310 6.93284871e-310]]]]] float64

【问题讨论】:

  • 特伦顿,不完全是,但感谢您的参考。我发现了我的错误,只是想了解为什么我得到这个特定的输出。从答案中我得到了为什么输出是这种形状,但现在我也对这些值感到好奇。
  • 可能是浮点精度。它们都等价于 0
  • 对于ndarray,您没有指定buffer,只是指定了shape。所以这些值是“未初始化的”,甚至不是 0。如果你想要一个具有给定形状的 0 数组,请使用 np.zeros(shape)

标签: python list numpy multidimensional-array


【解决方案1】:

你创建了一个五维数组。

a = [1, 5, 3, 6, 2]
b = np.ndarray(a)
print(b.shape)

给予

(1, 5, 3, 6, 2)

np.ndarray 的第一个参数是数组的形状。 你可能想要的

b = np.array(a)
print(b)

给了

[1 5 3 6 2]

【讨论】:

  • 谢谢,这是最清楚的答案。你能告诉我为什么大多数值是 6*10^(-310),而其中一些是不同的吗?
  • 我认为它是一个空数组,所以它是创建数组时内存中的任何内容。再试一次,你可能会得到不同的数字。
【解决方案2】:

您已经创建了一个 n 维数组,其中 n = 5 是传递的数组的长度(形成维度,如 here 所述)。

您可能正在寻找:

np.array(a)

这些数字是浮点数 0。

【讨论】:

    【解决方案3】:

    要从列表创建数组,请使用:b = np.array(a)np.ndarray 是另一个 numpy 类,函数的第一个参数是数组的形状(因此数组的形状是 b.shape -> (1, 5, 3, 6, 2)

    【讨论】:

      【解决方案4】:

      np.ndarray(shape, dtype=float....) 参数需要形状,因此它将在您的示例中创建一个形状为 (1, 5, 3, 6, 2) 的新数组

      a = [1, 5, 3, 6, 2]
      b = np.ndarray(a)
      print(b.shape)
      

      返回

      (1, 5, 3, 6, 2)
      

      你想要的是np.array

      a = [1, 5, 3, 6, 2]
      b = np.array(a)
      print(b.shape)
      

      返回

      (5,)
      

      【讨论】:

        猜你喜欢
        • 2014-03-19
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 2014-09-19
        • 2017-11-13
        • 1970-01-01
        相关资源
        最近更新 更多