首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据索引位置连接一维数组和二维数组

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

Stack Overflow用户
提问于 2019-10-09 04:24:07
回答 3查看 47关注 0票数 1

我正在尝试将一个一维数组连接成一个二维数组。我想避免做循环,因为如果我的数组长度大于1000,它就会占用大量的计算机资源。

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

代码语言:javascript
运行
复制
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]])

非常感谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2019-10-09 05:16:48

Mykola展示了这样做的正确方法,但我怀疑您需要一点帮助来理解原因。你试了几件事都没告诉我们出了什么问题。

代码语言:javascript
运行
复制
In [241]: array_a = np.array([1,2,3]) 
     ...: array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])  

vstack运行:

代码语言:javascript
运行
复制
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尝试在新的轴上联接数组,并要求所有输入数组都具有匹配的形状:

代码语言:javascript
运行
复制
In [243]: np.stack((array_a, array_b))                                          
...
ValueError: all input arrays must have the same shape

我怀疑你在没有真正阅读文档的情况下,随意地尝试了一下。

这两种方法都使用concatenate,这是基本的拼接器。但它对尺寸很挑剔:

代码语言:javascript
运行
复制
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)。join轴需要为1

代码语言:javascript
运行
复制
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所做的:

代码语言:javascript
运行
复制
In [248]: np.concatenate((array_a[None,:], array_b))                            
Out[248]: 
array([[ 1,  2,  3],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

另一个函数是:

代码语言:javascript
运行
复制
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做同样的事情。

vstackcolumn_stack这样的函数很方便,但从长远来看,最好理解如何使用concatenate本身。

票数 3
EN

Stack Overflow用户

发布于 2019-10-09 04:26:36

你想要insert

代码语言:javascript
运行
复制
import numpy as np

array_a = np.array([1, 2, 3])

array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])

result = np.insert(array_b, 0, array_a, axis=1)
print(result)

输出

代码语言:javascript
运行
复制
[[ 1 10 11 12]
 [ 2 20 21 22]
 [ 3 30 31 32]]
票数 2
EN

Stack Overflow用户

发布于 2019-10-09 05:00:09

您可以对第一个阵列执行reshape()操作,然后对两个阵列执行concatenate()操作:

代码语言:javascript
运行
复制
np.concatenate([array_a.reshape(3, -1), array_b], axis=1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58293610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档