【发布时间】:2016-07-26 12:41:37
【问题描述】:
长期以来,我总是使用np.array、np.asarray和np.asanyarray将array_like列表转换为数组。
但是当将标量转换为 numpy 数组时,我知道 np.atleast_1d(123) 会产生正确的结果,array([123])。
但我对np.array 和np.asarray 的输出感到困惑
i = 123
x = np.array(i, dtype=np.int)
print x # array(123)
print x.shape # ()
print x.size # 0
既然x.shape表示x是空的,那么array(123)是什么?这是一个 0 维数组,在其 __str__ 中仍然包含 123。
size=0 的真正空数组应该是 array([]),
print np.array([]).nbytes # 0
print np.array(123).nbytes # 8
print type(np.array(123)) # numpy.ndarray
显然它们是不同的,尽管它们的大小都是0。
【问题讨论】:
-
x.shape表示 x 具有空形状。x是一个标量,还有什么? -
@JulienBernu,
print x显示array(123),而不是array([]),这是常规的空数组。 -
投了反对票的小伙伴,请至少发表评论。这个问题不清楚,甚至你认为它太简单和愚蠢。
x不是标量,而是numpy.ndarray。 -
您混淆了“空”和“空形状”。
array([]).shape = (0,)。x不是空的,是一个标量,也是一个空形状的数组。 -
这看起来是一个答案。但现在我很困惑为什么
numpy是这样设计的,将标量转换为看似无用的东西。我从未见过这种类型的 empty-shape 数组的任何应用。他们本可以提出异常或使其以np.asanyarray的身份运行。
标签: python arrays numpy type-conversion