Numpy矩阵转置numpy.transpose([3,0,1,2])

时间:2018-04-18 04:35:46

标签: arrays python-3.x numpy multidimensional-array transpose

我能理解这是做什么numpy.transpose([3,0,1,2])。来自c ++我假设它代表了一些多deimenaional数组。我需要在给出任何矩阵或数组的情况下如何工作。

numpy doc上给出的示例非常简单,它们使用基本线性代数交换行和列。

2 个答案:

答案 0 :(得分:0)

所有这一切都是制作1d numpy数组:

public static int[] add(int [] x, int[] y){

     int[] z = new int [x.length];

     int j=0,
         hold,
         i;

     for(i=0; i<=z.length-1;i++) {

        z[i]=(x[i]+y[i]+j)%10;
        j=(x[i]+y[i]+j)/10;

     }

In [36]: np.transpose([3,0,1,2]) Out[36]: array([3, 0, 1, 2]) 是一个功能。提供列表时,它会将其转换为数组,然后应用np.transpose方法。

transpose

我怀疑表达式缺少一个参数,一个4d数组:

In [37]: np.array([3,0,1,2]).transpose()
Out[37]: array([3, 0, 1, 2])

对于2D阵列,In [38]: x = np.ones((2,3,4,5),int) In [39]: x.shape Out[39]: (2, 3, 4, 5) In [40]: y = x.transpose([3,0,1,2]) In [41]: y.shape Out[41]: (5, 2, 3, 4) 只是切换轴。这是常见的矩阵用法。对于其他维度,它概括了这个想法。如果没有进一步的参数,transpose会颠倒所有轴的顺序:

transpose

使用axis参数,我们可以控制新订单。

对于1d数组,反向仍然有效,除了[0]的反向仍为[0]。对于沉浸在MATLAB世界中的人来说可能会令人困惑,因为所有阵列都是2d(或更高)。在In [42]: x.transpose().shape Out[42]: (5, 4, 3, 2) 数组中可以是1d(有点像物理向量)。

只要更改numpystrides属性,就可以处理转置:

shape

https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html

答案 1 :(得分:0)

来自您的关联示例:

  

x = np.arange(4).reshape((2,2))

这里需要注意的重要一点是重塑的呼唤。 Numpy有一种处理数组的奇怪方式。您可能正在考虑将您的一维数组作为向量。在数学课上,我们倾向于认为这些具有维度(1,n)。或者在numpy的情况下:x.shape = (1,n)

事实并非如此。事实上,numpy会将您的输入视为一维数组。这更像是C ++ std::vector。您可能已经知道,尝试转置C ++向量是没有意义的。您可以确认numpy以这种方式考虑您的对象,因为它的形状值将返回(n,)

如果你想要转置,你需要在向量创建时告诉numpy你想要将这个对象视为具有两个维度。您可以在initialization期间在数组中设置ndmin=2来完成此操作。