Iva*_*ner 3 python arrays numpy
我有两个 numpy 数组(A 和 B)。它们在打印时看起来像这样:
A:
[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])]
Run Code Online (Sandbox Code Playgroud)
乙:
[[ 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]]
Run Code Online (Sandbox Code Playgroud)
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不显示,以及为什么Bnot的子数组的元素之间有逗号?
提前致谢。
A.dtype是O,对象,B.dtype是float。
A是一个包含对象的一维数组,这些对象恰好是数组。它们也可以是列表或 None`。
B是一个二维浮点数组。索引一行B给出一个一维数组。
所以A[0]和B[0]可以看起来产生同样的东西,但选择过程是不同的。
尝试np.concatenate(A),或np.vstack(A)。然后将这两个A视为一个数组列表,并在 1 或 2d 中加入它们。
将对象数组转换为常规数组经常出现。
将 3D 列表转换为 3D NumPy 数组比 您需要的更通用一些,但提供了很多有用的信息。
还
==================
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]])
Run Code Online (Sandbox Code Playgroud)