Skip to main content
 首页 » 编程设计

python之根据索引位置连接一维和二维数组

2025年05月04日14java哥

我正在尝试将 1D 连接到 2D 数组。我想避免执行循环,因为如果我的数组长度大于 1000,它会占用大量计算机资源。

我已经尝试过 vstack、stack 和 concatenate,但都没有成功。

import numpy as np 
 
array_a = np.array([1,2,3]) 
 
array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]]) 

预期的输出应该是

array([[1, 10, 11, 12], [2, 20, 21, 22], [3, 30, 31, 32]])

非常感谢您的帮助!

请您参考如下方法:

Mykola 展示了执行此操作的正确方法,但我怀疑您需要一些帮助才能理解其中的原因。你尝试了几件事,却没有告诉我们哪里出了问题。

In [241]: array_a = np.array([1,2,3])  
     ...: array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])   

vstack 运行:

In [242]: np.vstack((array_a, array_b))                                          
Out[242]:  
array([[ 1,  2,  3], 
       [10, 11, 12], 
       [20, 21, 22], 
       [30, 31, 32]]) 

但结果是一个垂直连接,按行而不是按列。 vstack 中的 v 应该提醒我们这一点。

stack 尝试在新 轴上连接数组,并要求所有输入数组具有匹配的形状:

In [243]: np.stack((array_a, array_b))                                           
... 
ValueError: all input arrays must have the same shape 

我怀疑你是随意尝试的,没有真正阅读文档。

这两个都使用concatenate,这是基本的连接器。但它对尺寸很挑剔:

In [244]: np.concatenate((array_a, array_b))                                     
... 
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s) 

您清楚地意识到维度数不匹配。

您想制作一个 (3,4) 数组。一个是 (3,3),另一个需要是 (3,1)。并且连接轴需要为1

In [247]: np.concatenate((array_a[:,None], array_b), axis=1)                     
Out[247]:  
array([[ 1, 10, 11, 12], 
       [ 2, 20, 21, 22], 
       [ 3, 30, 31, 32]]) 

如果我们创建一个 (1,3) 数组,并尝试在默认的 0 轴上进行连接,我们会得到与 vstack 相同的结果。事实上,这就是 vstack 所做的:

In [248]: np.concatenate((array_a[None,:], array_b))                             
Out[248]:  
array([[ 1,  2,  3], 
       [10, 11, 12], 
       [20, 21, 22], 
       [30, 31, 32]]) 

另一个函数是:

In [249]: np.column_stack((array_a, array_b))                                    
Out[249]:  
array([[ 1, 10, 11, 12], 
       [ 2, 20, 21, 22], 
       [ 3, 30, 31, 32]]) 

这与 [247] 的作用相同。

像 vstack 和 column_stack 这样的函数很方便,但从长远来看,最好了解如何使用 concatenate 本身。