将异构维三维数字阵列重塑为二维阵列

2024-04-29 01:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据是三维的,但只有第三个轴有已知的维度,我需要将其转换为二维数组。在

示例:

input = 
[[[1, 2, 3]],

 [[4, 5, 6],
  [7, 8, 9]],

 [[1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]]]

input_reshaped = 
[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9],
 [1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]]

所以我有一个三维数据,其中第一个和第二个维度在我的数据集中是可变的,第三个维度是常量,而且是已知的。在

输入中的每个块也是numpy数组。我知道我可以用纽比.vstack在第一维度上迭代。但如果可能的话,我想用Python式的方式来重塑我的数据,而不需要明确地迭代我的数据。在

我已经尝试过执行一个列表比较,以获得每个块的第一个形状,然后求和这些值并将其与整形一起使用。像这样:

^{pr2}$

但是对于前面示例中的输入,我得到以下错误:

ValueError: cannot reshape array of size 3 into shape (6,3)

因为Python看到输入有一个numy.array带形状(3,)

有什么想法吗?在

附加:如果可能的话,在上述条件下进行反向转换将是非常棒的!在


Tags: 数据numpy示例列表input错误方式数组
1条回答
网友
1楼 · 发布于 2024-04-29 01:14:45

按照评论中的建议,vstack或{}:

In [320]: alist
Out[320]: [[[1, 2, 3]], [[4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]]
In [321]: len(alist)
Out[321]: 3

尝试从列表生成数组只会创建一个1d列表数组。帮不了多少忙。reshape不起作用。在

^{pr2}$

但是concatenate使用数组列表(或类似数组的对象):

In [323]: np.concatenate(alist, axis=0)
Out[323]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9],
       [1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

concatenate也将与Out[322]一起工作,因为它将其输入视为一个列表,即使它是一个数组。在

vstack是同一件事,只是它确保子数组都是2d的,在本例中它们已经是2d了。在

相关问题 更多 >