Numpy追加多个数组



在R中很容易组合多个向量,例如:

a<-c(1,2,3)
b<-c(4,5,6,7)
c<-c(8,9,10)
#combine to
d<-c(a,b,c)

这是我想用NumPy重新创建的。

我尝试使用np来实现这个。只要所有数组的长度相同,它就可以正常工作,例如:

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
d = np.append(a,(b,c)) #works fine

然而

a = np.array([1,2,3])
b = np.array([4,5,6,7])
c = np.array([8,9,10])
d = np.append(a,(b,c)) #does not work fine

结果为:[1,2 3 array([4,5,6,7]) array([8,9,10])]。我如何把它变成一个经典的NumPy数组[1 2 3 4 5 6 7 8 9 10]?

我认为你需要这个功能:

np.concatenate([a,b,c])

我说的对吗?

np.concatenate用于沿一个特定轴(默认为0轴)连接具有相同维数但大小不同的数组。在你的情况下,因为你只有一个维度,你想要连接你唯一的维度,你也可以使用np.hstack([a,b,c]),正如@Sembei Norimaki在评论中提到的。

编辑在评论中回答你的问题:

numpy源代码中的

if axis is None:
if arr.ndim != 1:
arr = arr.ravel()
values = ravel(values)
axis = arr.ndim-1
return concatenate((arr, values), axis=axis)
如您所见,要追加的values在追加之前被强制为numpy数组(这发生在ravel函数中)。由于您的数组具有不同的形状,因此不可能将它们转换为整数numpy数组,因此将创建numpy数组的numpy数组(尝试np.array((b,c)),看看会发生什么)。由于这个原因,您正在将numpy数组的numpy数组附加到整数numpy数组,这会导致问题。