在Python

时间:2017-05-13 22:20:07

标签: python numpy matrix

我有X个2x2矩阵的Numpy数组n,排列为X.shape = (2,2,n),即得到我称之为X[:,:,0]的第一个矩阵。我想将X重新整形为数组Y,这样我就可以通过调用Y[0]等来获取第一个矩阵,但执行X.reshape(n,2,2)会使矩阵混乱。如何在重塑数组时保留矩阵?

我基本上是想这样做:

import numpy as np
Y = np.zeros([n,2,2])
for i in range(n):
    Y[i] = X[:,:,i]

但不使用for循环。如何使用reshape或类似函数执行此操作?

(要获取示例数组X,请针对某些X = np.concatenate([np.identity(2)[:,:,None]] * n, axis=2)尝试n。)

2 个答案:

答案 0 :(得分:1)

numpy.moveaxis可用于获取一个数组的视图,其中一个轴移动到形状中的不同位置:

numpy.moveaxis(X, 2, 0)

numpy.moveaxis(a, source, destination)获取数组a的视图,其中最初位于source位置的轴最终位于destination位置,因此numpy.moveaxis(X, 2, 0)使原始轴2成为原点视图中的新轴0。

还有numpy.transpose,如果您将可选的第二个参数和numpy.rollaxis传递给它,它可用于一次性执行数组轴的任意重新排列,较早版本的moveaxis,其调用惯例更加混乱。

答案 1 :(得分:0)

使用swapaxis

Y = X.swapaxes(0,2)