我有一个数组:[1, 2, 3, 4, 5, 6]。我想使用numpy.reshape()函数来结束这个数组:
[[1, 4],
[2, 5],
[3, 6]
]我不知道该怎么做。我总是这样,这不是我想要的:
[[1, 2],
[3, 4],
[5, 6]
]发布于 2020-03-30 21:41:17
您可以在np.reshape中设置顺序,在您的情况下,您可以使用'F'。详细信息请参见文档
>>> arr
array([1, 2, 3, 4, 5, 6])
>>> arr.reshape(-1, 2, order = 'F')
array([[1, 4],
[2, 5],
[3, 6]])发布于 2020-03-30 21:41:42
它们做同样的事情:
In [57]: np.reshape([1,2,3,4,5,6], (3,2), order='F')
Out[57]:
array([[1, 4],
[2, 5],
[3, 6]])
In [58]: np.reshape([1,2,3,4,5,6], (2,3)).T
Out[58]:
array([[1, 4],
[2, 5],
[3, 6]])通常,值在Python/numpy中的行之间“读取”。这是呼叫行-少校或C命令。向下读是'F',用于FORTRAN,在MATLAB中很常见,它有Fortran词根。
如果您接受'F‘命令,创建一个新的副本并将其串出,您将得到一个不同的顺序:
In [59]: np.reshape([1,2,3,4,5,6], (3,2), order='F').copy().ravel()
Out[59]: array([1, 4, 2, 5, 3, 6])发布于 2020-03-30 21:50:15
您得到这个结果的原因是数组通常是按C顺序分配的。这意味着仅靠重塑是不够的。当numpy沿着数组前进时,您必须告诉numpy更改轴的顺序。任何数量的操作都将允许您这样做:
F。F代表Fortran,与MATLAB一样,Fortran通常使用列-主要顺序:
a.reshape(2,3,阶=‘F’)请注意,除了第一种情况之外,所有的情况都需要您重新调整到转置。
您甚至可以手动安排数据。
np.stack((a[:3], a[3:]), axis=1)请注意,这将产生许多不必要的副本。如果您想要复制数据,只需执行
a.reshape(2, 3, order='F').copy()https://stackoverflow.com/questions/60939903
复制相似问题