Numpy重塑具有特定顺序的数组

时间:2018-10-24 12:49:39

标签: python arrays numpy reshape

假设我有这个数组x:

x = array([1, 2, 3, 4, 5, 6, 7, 8])
x.shape = (8,1)

我想重塑它成为

array([[1, 3, 5, 7], 
       [2, 4, 6, 8]])

这是在x上的reshape(2,4),但是很简单:

y = x.reshape(2,4)

y变为

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

那不是我想要的。有没有办法以这种特定方式转换数组?

4 个答案:

答案 0 :(得分:6)

In[4]: x.reshape(4, 2).T
Out[4]: 
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])

答案 1 :(得分:2)

最简单的方法是在order函数中指定reshape参数。


您需要Fortran订单。

侧面说明:Matlab默认使用Fortran顺序,但在python中需要指定该顺序。


使用此功能:

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x.reshape(2,4, order='F')

print(y)
#array([[1, 3, 5, 7],
#       [2, 4, 6, 8]])

答案 2 :(得分:2)

另一种选择是使用order='F'选项进行重塑,就像

res = numpy.reshape(my_array, (2,4), order='F')

https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html

答案 3 :(得分:0)

是的,您可以这样做:

y = np.array([x[0::2], x[1::2]])