我有一个 NumPy 数组“数据”,如下所示:
data = np.array([
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0],
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0],
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0]])
我想从给定的数组“数据”生成数组“结果”。实际上,在所需的数组中,必须将零列放在中间,然后值向右方向增加,而值向左方向减少,如下所示:
result = np.array([
[-180.0, -150.0, -120.0, -90.0, -60.0, -30.0, 0.0, 30.0, 60.0, 90.0, 120.0, 150.0, 180.0],
[-180.0, -150.0, -120.0, -90.0, -60.0, -30.0, 0.0, 30.0, 60.0, 90.0, 120.0, 150.0, 180.0],
[-180.0, -150.0, -120.0, -90.0, -60.0, -30.0, 0.0, 30.0, 60.0, 90.0, 120.0, 150.0, 180.0]])
结果数组应该基于给定数组的索引操作。在 NumPy 中执行此操作的最佳方法是什么?
我尝试了np.rot90、np.flipud、np.fliprl
函数,但没有成功。
但是,我不知道如何开始。
最佳答案
看看np.roll :
np.roll(data, shift=data.shape[1]//2, axis=1)
这里的 shift
表示要滚动数据的元素数量(正值向右,负值向左)。根据规范,我们希望将其沿第二个维度 (axis=1
) 向右滚动数组长度的一半。 //
是整数除法,data.shape[1]
获取沿第二维度的维度大小(基于零索引)。
我认为您缺少 data
中 result
中的 +180.0
值(即您的 result
有 13 列,但您的 data
只有 12 列)。
In [9]: data = np.array([
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0],
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0],
[0.0, 30.0, 60.0, 90.0, 120.0, 150.0, -180.0, -150.0, -120.0, -90.0, -60.0, -30.0]])
In [10]: result = np.roll(data, data.shape[1]//2, axis=1)
In [11]: result
Out[11]:
array([[-180., -150., -120., -90., -60., -30., 0., 30., 60.,
90., 120., 150.],
[-180., -150., -120., -90., -60., -30., 0., 30., 60.,
90., 120., 150.],
[-180., -150., -120., -90., -60., -30., 0., 30., 60.,
90., 120., 150.]])
这并不是真正基于索引的排序,但考虑到您尝试过的其他方法,我猜测这是您可能想要的类型操作。
关于python - NumPy 数组元素的自定义排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532558/