numpy数组的穿插项目

问题描述 投票:0回答:2

我有一个类似于这个的3维numpy数组:

a = np.array([[[1, 2],
               [3, 4]],
              [[5, 6],
               [7, 8]],
              [[9, 10],
               [11, 12]]])

我想做的是散布外部数组中包含的每个2D数组以产生这个结果:

t = np.array([[[1, 2], [5, 6], [9, 10]],
              [[3, 4], [7, 8], [11, 12]]])

我可以在这样的Python中做到这一点,但我希望有一个更有效,更numpy版本:

t = np.empty((a.shape[1], a.shape[0], a.shape[2]), a.dtype)
for i, x in np.ndenumerate(a):
   t[i[1], i[0], i[2]] = x
python arrays numpy multidimensional-array
2个回答
1
投票

正如@UdayrajDeshmukh所说,你可以使用transpose方法(尽管这个名称在线性代数中唤起了“转置”运算符,但更好地理解为“置换轴”):

>>> t = a.transpose(1, 0, 2)
>>> t
array([[[ 1,  2],
        [ 5,  6],
        [ 9, 10]],

       [[ 3,  4],
        [ 7,  8],
        [11, 12]]])

新创建的对象t是一个浅层数组,用不同的索引排列来查看a的数据。要复制您自己的示例,您需要copy,例如t = a.transpose(1, 0, 2).copy()


1
投票

尝试transpose功能。您只需更改前两个轴即可。

t = np.transpose(a, axes=(1, 0, 2))
© www.soinside.com 2019 - 2024. All rights reserved.