numpy数组的穿插项目

时间:2018-03-01 12:14:07

标签: python arrays numpy multidimensional-array

我有一个类似于此的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中做到这一点,但我希望那里有一个更高效,更笨重的版本:

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

2 个答案:

答案 0 :(得分:1)

尝试使用transpose功能。您只需更改前两个轴。

t = np.transpose(a, axes=(1, 0, 2))

答案 1 :(得分: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()