【问题标题】:Best practice to vstack multiple large np.arrays?vstack 多个大型 np.arrays 的最佳实践?
【发布时间】:2018-10-22 11:54:14
【问题描述】:

我有 4 个 numpy.arrays:X1、X2、X3、X4;每个形状:60000,700。

我想把它们放在一起

X1[0,:]
X2[0,:]
X3[0,:]
X4[0,:]
X1[1,:]
....

这将产生一个形状为:240000,700 的数组。
我尝试通过 vstack 在一个循环中做到这一点。

X = np.empty((0,X1[0,:].shape[0]))
for row in range(X1.shape[0]):
    X = np.vstack((X,X1[row,:],X2[row,:],X3[row,:],X4[row,:]))

有没有更快或内存效率更高的方法来做到这一点?

编辑、添加:
我也有 4 个 numpy.arrays:y1、y2、y3、y4;每个形状:60000,
应该堆叠为:

y1[0,:]
y2[0,:]
y3[0,:]
y4[0,:]
y1[1,:]
....

这应该会产生一个形状为:240000 的数组,

【问题讨论】:

    标签: python-3.x numpy jupyter-notebook


    【解决方案1】:

    您可以使用np.hstack 水平堆叠和重塑 -

    np.hstack((X1,X2,X3,X4)).reshape(-1,X1.shape[1])
    

    现在,hstack 建立在 concatenate 之上。因此,我们可以通过直接使用它来获得进一步的改进 -

    np.concatenate((X1,X2,X3,X4),axis=1).reshape(-1,X1.shape[1])
    

    等同于np.stack -

    np.stack((X1,X2,X3,X4),axis=1).reshape(-1,X1.shape[1])
    

    【讨论】:

    • 超级解决方案!超级快!
    • 但是......我也有向量(形状:(60000,))。由于“形状”,您的解决方案在这里不起作用。对尺寸进行硬编码当然可以:.reshape(-1,1)。但是我该如何概括呢?
    • @rul30 你能用你的循环代码展示你想如何在(60000,)形状数组中堆叠吗?
    • @rul30 只需跳过一维数组案例的重塑即可。
    • @rul30 使用我之前的评论。
    猜你喜欢
    • 2011-01-23
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多