我有一个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
个功能但没有成功。
然而,我想不出如何开始。
答案 0 :(得分:1)
看看np.roll:
np.roll(data, shift=data.shape[1]//2, axis=1)
这里shift
表示要滚动数据的元素数量(右侧为正值,左侧为负值)。根据规范,我们希望沿着第二维(axis=1
)向右滚动数组的一半长度。 //
是整数除法,data.shape[1]
获取第二维的维度大小(基于零索引)。
我认为您错过+180.0
result
data
中的result
值(即data
有13列,但您的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.]])
只有12)。
{{1}}
这不是基于索引的排序,但考虑到你尝试的其他方法,我猜这是你可能想要的类型操作。
答案 1 :(得分:0)
所以,我猜你是否正在尝试将此数组从最小值排序到最高值?你的问题并不完全清楚。试试这个?
result = []
for row in data:
result.append(np.sort(row))
您可以使用numpy中的设施轻松转换'结果'再次进入一个numpy数组。有关np.sort available here
的更多信息