vstack如何根据numpy文档工作

2024-09-24 06:33:08 发布

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

这里是Python初学者。
在阅读了numpy文档后,该文档称vstack相当于在形状(N,)的一维数组被重塑为(1,N)后沿第一个轴进行连接。

因此,下面的代码

a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))

应该是

np.concatenate((a,b),axis=0))

将所有一维阵列从(1,)重塑为(1,1)
a将是

[[[1]]
 [[2]]
 [[3]]]

b将是

[[[2]]
 [[3]]
 [[4]]]

所以

np.concatenate((a,b),axis=0)

应该是

[[[1]]
 [[2]]
 [[3]]
 [[2]]
 [[3]]
 [[4]]]

但结果表明

[[1]
 [2]
 [3]
 [2]
 [3]
 [4]]

我这边有什么误解吗?请找出我哪里出了问题


Tags: 代码文档numpynp数组array形状重塑
1条回答
网友
1楼 · 发布于 2024-09-24 06:33:08

代码如下:

def vstack(tup):
    arrs = np.atleast_2d(*tup)
    if not isinstance(arrs, list):
        arrs = [arrs]
    return np.concatenate(arrs, 0)

因此,它只是确保输入是(至少)2d数组的列表,并在第一个轴上进行连接

您的阵列已经是二维的,所以它就是二维的

In [45]: a = np.array([[1], [2], [3]])
    ...: b = np.array([[2], [3], [4]])
In [46]: a
Out[46]: 
array([[1],
       [2],
       [3]])
In [47]: b
Out[47]: 
array([[2],
       [3],
       [4]])
In [48]: np.concatenate((a,b), axis=0)
Out[48]: 
array([[1],
       [2],
       [3],
       [2],
       [3],
       [4]])

你的“应该”

In [49]: np.concatenate((a[...,None],b[...,None]), axis=0)
Out[49]: 
array([[[1]],

       [[2]],

       [[3]],

       [[2]],

       [[3]],

       [[4]]])
In [50]: _.shape
Out[50]: (6, 1, 1)

添加维度很重要的情况,将(3,)数组更改为(1,3):

In [51]: np.vstack((a.ravel(),b.ravel()))
Out[51]: 
array([[1, 2, 3],
       [2, 3, 4]])

相关问题 更多 >