我尝试了以下方法:
>>> a = np.array([1,2,3]) >>> b = np.array([4,5,6]) >>> np.concatenate((a,b), axis=0) array([1, 2, 3, 4, 5, 6]) >>> np.concatenate((a,b), axis=1) array([1, 2, 3, 4, 5, 6])
但是,我希望至少有一个结果是这样的
array([[1, 2, 3], [4, 5, 6]])
为什么不纵向连接?
jmo0nnb31#
因为a和b都只有一个轴,因为它们的形状是(3),所以axis参数专门指要连接的元素的轴。这个例子应该能说明concatenate对轴做了什么。2取两个向量和两个轴,形状为(2,3):
a
b
(3)
concatenate
(2,3)
a = np.array([[1,5,9], [2,6,10]]) b = np.array([[3,7,11], [4,8,12]])
沿着第1个轴连接(先连接第1个轴的行,然后连接第2个轴的行):
np.concatenate((a,b), axis=0) array([[ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11], [ 4, 8, 12]])
沿着第二个轴串联(第一个轴的列,然后是第二个轴的列):
np.concatenate((a, b), axis=1) array([[ 1, 5, 9, 3, 7, 11], [ 2, 6, 10, 4, 8, 12]])
要获得您提供的输出,可以使用vstack
vstack
a = np.array([1,2,3]) b = np.array([4,5,6]) np.vstack((a, b)) array([[1, 2, 3], [4, 5, 6]])
您仍然可以使用concatenate执行此操作,但首先需要重新塑造它们:
np.concatenate((a.reshape(1,3), b.reshape(1,3))) array([[1, 2, 3], [4, 5, 6]])
最后,正如评论中所建议的那样,一种重塑它们的方法是使用newaxis:
newaxis
np.concatenate((a[np.newaxis,:], b[np.newaxis,:]))
brccelvz2#
如果当前的实际问题是垂直连接两个一维数组,并且我们并不专注于使用concatenate来执行此操作,那么我建议使用**np.column_stack**:
In []: a = np.array([1,2,3]) In []: b = np.array([4,5,6]) In []: np.column_stack((a, b)) array([[1, 4], [2, 5], [3, 6]])
t2a7ltrp3#
numpy的一个不太为人所知的特性是使用r_,这是一个快速构建数组的简单方法:
r_
import numpy as np a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.r_[a[None,:],b[None,:]] print(c) #[[1 2 3] # [4 5 6]]
a[None,:]的用途是向数组a添加一个轴。
a[None,:]
tgabmvqs4#
a = np.array([1,2,3]) b = np.array([4,5,6]) np.array((a,b))
效果和
np.array([[1,2,3], [4,5,6]])
不管是列表的列表还是1d数组的列表,np.array都试图创建2d数组。但是理解np.concatenate和它的stack函数家族是如何工作的也是一个好主意,在这里concatenate需要一个2d数组列表(或者任何np.array可以转换成2d数组的东西)作为输入。np.vstack首先循环输入,确保它们至少是2d的,然后进行连接。从功能上讲,这与自己扩展数组的维数是一样的。np.stack是一个在新维度上连接数组的新函数。默认行为类似于np.array。看看这些函数的代码。如果用Python编写,你可以学到很多东西。对于vstack:
np.array
np.concatenate
stack
np.vstack
np.stack
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
p5cysglq5#
假设你有3个NumPy数组(A,B,C),你可以像这样垂直地连接这些数组:
import numpy as np np.concatenate((A, B, C), axis=1) np.shape
5条答案
按热度按时间jmo0nnb31#
因为
a
和b
都只有一个轴,因为它们的形状是(3)
,所以axis参数专门指要连接的元素的轴。这个例子应该能说明
concatenate
对轴做了什么。2取两个向量和两个轴,形状为(2,3)
:沿着第1个轴连接(先连接第1个轴的行,然后连接第2个轴的行):
沿着第二个轴串联(第一个轴的列,然后是第二个轴的列):
要获得您提供的输出,可以使用
vstack
您仍然可以使用
concatenate
执行此操作,但首先需要重新塑造它们:最后,正如评论中所建议的那样,一种重塑它们的方法是使用
newaxis
:brccelvz2#
如果当前的实际问题是垂直连接两个一维数组,并且我们并不专注于使用
concatenate
来执行此操作,那么我建议使用**np.column_stack**:t2a7ltrp3#
numpy的一个不太为人所知的特性是使用
r_
,这是一个快速构建数组的简单方法:a[None,:]
的用途是向数组a
添加一个轴。tgabmvqs4#
效果和
不管是列表的列表还是1d数组的列表,
np.array
都试图创建2d数组。但是理解
np.concatenate
和它的stack
函数家族是如何工作的也是一个好主意,在这里concatenate
需要一个2d数组列表(或者任何np.array
可以转换成2d数组的东西)作为输入。np.vstack
首先循环输入,确保它们至少是2d的,然后进行连接。从功能上讲,这与自己扩展数组的维数是一样的。np.stack
是一个在新维度上连接数组的新函数。默认行为类似于np.array
。看看这些函数的代码。如果用Python编写,你可以学到很多东西。对于
vstack
:p5cysglq5#
假设你有3个NumPy数组(A,B,C),你可以像这样垂直地连接这些数组: