Numpy 以特定顺序重塑数组
Numpy reshape an array with specific order
假设我有这个数组 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]])
这不是我想要的。有没有办法以特定方式转换数组?
是的,你可以这样做:
y = np.array([x[0::2], x[1::2]])
In[4]: x.reshape(4, 2).T
Out[4]:
array([[1, 3, 5, 7],
[2, 4, 6, 8]])
最简单的方法是在 reshape
函数中指定 order
参数。
您需要 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]])
另一种选择是使用选项 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
假设我有这个数组 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]])
这不是我想要的。有没有办法以特定方式转换数组?
是的,你可以这样做:
y = np.array([x[0::2], x[1::2]])
In[4]: x.reshape(4, 2).T
Out[4]:
array([[1, 3, 5, 7],
[2, 4, 6, 8]])
最简单的方法是在 reshape
函数中指定 order
参数。
您需要 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]])
另一种选择是使用选项 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