Numpy追加多个数组

hmae6n7t  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(133)

在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.append来实现这一点,只要所有数组具有相同的长度,它就可以正常工作,例如:

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]

kdfy810k

kdfy810k1#

我想你需要这个功能:

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

我说的对吗?
np.concatenate用于沿着一个特定轴(默认为0轴)连接维数相同但大小不同的数组。在本例中,由于只有一个维度,并且您希望连接唯一的维度,因此也可以使用np.hstack([a,b,c]),如@ Semei Norimaki在注解中所述。
EDIT在评论中回答您的问题:
在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数组,这会导致问题。

相关问题