在第四维连接两个numpy数组

30 投票
6 回答
32047 浏览
提问于 2025-04-17 10:27

我有两个三维的numpy数组,大小是3 x 4 x 5,我想把它们合并成一个四维的数组,大小变成3 x 4 x 5 x 2。在Matlab中,可以用cat(4, a, b)来实现,但在Numpy中不能这样做。

举个例子:

a = ones((3,4,5))
b = ones((3,4,5))
c = concatenate((a,b), axis=3) # error!

为了更清楚,我希望c[:,:,:,0]c[:,:,:,1]分别对应原来的两个数组。

6 个回答

14

下面这个怎么样:

c = concatenate((a[:,:,:,None],b[:,:,:,None]), axis=3)

这段代码会生成一个 (3 x 4 x 5 x 2) 的数组,我认为这个数组的排列方式是你需要的。

在这里,Nonenp.newaxis 是一样的意思:Numpy: 我应该使用 newaxis 还是 None?

编辑 根据 @Joe Kington 的建议,这段代码可以稍微简化一下,使用省略号来表示:

c = concatenate((a[...,None],b[...,None]), axis=3)
29

这是你要的内容:

import numpy as np
a = np.ones((3,4,5))
b = np.ones((3,4,5))
c = np.concatenate((a[...,np.newaxis],b[...,np.newaxis]),axis=3)
32

那关于这个呢

c = np.stack((a,b), axis=3)

撰写回答