Python在numpy数组中展平数组
我有一个相当愚蠢的问题,但出于某种原因,我就是不知道该怎么办。我有一个多维numpy数组,它应该具有以下形状: (345138、30300) 但是,它实际上具有以下形状: (345138,1) 在1元素数组中是包含形状的数组 (30,300) 那么,如何“移动”内部阵列,以使形状正确 目前看起来是这样的:Python在numpy数组中展平数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个相当愚蠢的问题,但出于某种原因,我就是不知道该怎么办。我有一个多维numpy数组,它应该具有以下形状: (345138、30300) 但是,它实际上具有以下形状: (345138,1) 在1元素数组中是包含形状的数组 (30,300) 那么,如何“移动”内部阵列,以使形状正确 目前看起来是这样的: [[ array([[0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], ..
[[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=int32)]
[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[[ [0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]],
[ [0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
但是我希望这个没有数组(…),dtype=32,并将其中的内容移动到第一个数组中,使形状为(345138,30,300),如下所示:
[[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=int32)]
[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[[ [0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]],
[ [0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
有什么想法吗?看起来您有一个包含二维数组(对象数据类型)的二维数组。我可以用以下方法构造一个类似的:
In [972]: arr = np.empty(4,dtype=object)
In [973]: arr = np.empty((4,1),dtype=object)
In [974]: for i in range(4): arr[i,0]=np.ones((2,3),int)
In [975]: arr
Out[975]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
简单地将其包装在np.array
中不起作用;不适用于列表:
In [976]: np.array(arr)
Out[976]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
In [977]: arr.tolist()
Out[977]:
[[array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])]]
“扁平化”的一种方法是使用某种版本的连接:
In [978]: np.stack(arr.ravel())
Out[978]:
array([[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]]])
In [979]: _.shape
Out[979]: (4, 2, 3)
我使用ravel
将外部数组减少到1d,而stack
可以用作列表stack
的作用类似于np.array
,因为它将元素组合在一个新的轴上(我们可以指定)
tolist
和array
可以一起工作:
In [981]: np.array(arr.tolist())
Out[981]:
array([[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]]])
In [982]: _.shape
Out[982]: (4, 1, 2, 3)
或者tolist
plussquare
(实际上是np.asarray(…).square()
)
看起来您有一个包含二维数组(对象数据类型)的二维数组。我可以用以下方法构造一个类似的:
In [972]: arr = np.empty(4,dtype=object)
In [973]: arr = np.empty((4,1),dtype=object)
In [974]: for i in range(4): arr[i,0]=np.ones((2,3),int)
In [975]: arr
Out[975]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
简单地将其包装在np.array
中不起作用;不适用于列表
:
In [976]: np.array(arr)
Out[976]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
In [977]: arr.tolist()
Out[977]:
[[array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])]]
“扁平化”的一种方法是使用某种版本的连接:
In [978]: np.stack(arr.ravel())
Out[978]:
array([[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]]])
In [979]: _.shape
Out[979]: (4, 2, 3)
我使用ravel
将外部数组减少到1d,而stack
可以用作列表stack
的作用类似于np.array
,因为它将元素组合在一个新的轴上(我们可以指定)
tolist
和array
可以一起工作:
In [981]: np.array(arr.tolist())
Out[981]:
array([[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]]])
In [982]: _.shape
Out[982]: (4, 1, 2, 3)
或者tolist
plussquare
(实际上是np.asarray(…).square()
)
您已经尝试过.tolist()
了吗?尝试:np.array(x)
如果形状兼容,它们将被压扁。hmmm不,不幸的是,这没有改变任何事情一个元素数组正在破坏一切。您是如何创建这个数组的?看看你是否能解决这个问题。是的,你可能是对的,我通过df从数据帧检索数组。as_matrix(),所以我假设它被错误地放入数据帧。你是否已经尝试过.tolist()
?尝试:np.array(x)
,如果形状兼容,它们将被压扁。嗯,不,很遗憾,这并没有改变任何事情一个元素数组正在毁掉一切你是怎么创建这个数组的?看看你是否能解决这个问题。是的,你可能是对的,我通过df.as_matrix()从数据帧检索数组,所以我假设它被错误地放入数据帧中。嗨,非常感谢,这很有效!但它也使我的电脑崩溃了:D你太棒了!嗨,非常感谢,这很有效!但它也使我的电脑崩溃了:D你太棒了!