我能理解这是做什么numpy.transpose([3,0,1,2])
。来自c ++我假设它代表了一些多deimenaional数组。我需要在给出任何矩阵或数组的情况下如何工作。
在numpy doc上给出的示例非常简单,它们使用基本线性代数交换行和列。
答案 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(有点像物理向量)。
只要更改numpy
和strides
属性,就可以处理转置:
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
来完成此操作。