【问题标题】:Numpy array of numpy arrays has 1D shapenumpy 数组的 numpy 数组具有 1D 形状
【发布时间】:2017-03-12 11:52:32
【问题描述】:

我有两个 numpy 数组(A 和 B)。打印时它们看起来像这样:

答:

[array([0, 0, 0]) array([0, 0, 0]) array([1, 0, 0]) array([0, 0, 0])
 array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0])
 array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 1]) array([0, 0, 0])
 array([1, 0, 0]) array([0, 0, 1]) array([0, 0, 0]) array([0, 0, 0])
 array([0, 0, 0]) array([1, 0, 0]) array([0, 0, 1]) array([0, 0, 0])]

乙:

[[  4.302135e-01   4.320091e-01   4.302135e-01   4.302135e-01
    1.172584e+08]
 [  4.097128e-01   4.097128e-01   4.077675e-01   4.077675e-01
    4.397120e+07]
 [  3.796353e-01   3.796353e-01   3.778396e-01   3.778396e-01
    2.643200e+07]
 [  3.871173e-01   3.890626e-01   3.871173e-01   3.871173e-01
    2.161040e+07]
 [  3.984899e-01   4.002856e-01   3.984899e-01   3.984899e-01
    1.836240e+07]
 [  4.227315e-01   4.246768e-01   4.227315e-01   4.227315e-01
    1.215760e+07]
 [  4.433817e-01   4.451774e-01   4.433817e-01   4.433817e-01
    9.340800e+06]
 [  4.620867e-01   4.638823e-01   4.620867e-01   4.620867e-01
    1.173760e+07]]

type(A)type(A[0])type(B)type(B[0])都是<class 'numpy.ndarray'>

但是,A.shape(20,),而 B.shape(8, 5)

问题 1:为什么A.shape 是一维的,我如何使它像B.shape 一样是二维的?它们都是数组的数组,对吧?

问题2,可能与Q1有关:为什么打印A会显示array()的调用,而打印B却没有,为什么B的子数组的元素中没有逗号-他们之间?

提前致谢。

【问题讨论】:

  • 你看过每个数组的dtype了吗?一个是数组数组,另一个是二维浮点数组。
  • 这是我的问题——如何将数组数组变成整数/浮点数的二维数组?

标签: python arrays numpy


【解决方案1】:

A.dtypeO,对象,B.dtypefloat

A 是一个包含对象的一维数组,这些对象恰好是数组。它们也可以是列表或 None`。

B 是一个二维浮点数组。索引B 的一行会得到一个一维数组。

所以A[0]B[0] 看起来可以产生相同的东西,但选择过程不同。

试试np.concatenate(A),或np.vstack(A)。然后,它们都将A 视为数组列表,并在 1 或 2d 中加入它们。

将对象数组转换为常规数组经常出现。

Converting a 3D List to a 3D NumPy array 比您需要的更笼统,但提供了很多有用的信息。

还有

Convert a numpy array of lists to a numpy array

===================

In [28]: A=np.empty((5,),object)
In [31]: A
Out[31]: array([None, None, None, None, None], dtype=object)
In [32]: for i in range(5):A[i]=np.zeros((3,),int)
In [33]: A
Out[33]: 
array([array([0, 0, 0]), array([0, 0, 0]), array([0, 0, 0]),
       array([0, 0, 0]), array([0, 0, 0])], dtype=object)
In [34]: print(A)
[array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0])
 array([0, 0, 0])]
In [35]: np.vstack(A)
Out[35]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

编辑

np.stack(A)

可以在新的引导轴上加入数组。

如果子数组的形状不同,这些“堆栈”函数将引发错误。由您来查找问题数组。

【讨论】:

  • 嗯,我错过了那个答案...谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
相关资源
最近更新 更多