Python NumPy数组元素的自定义排列

Python NumPy数组元素的自定义排列,python,arrays,numpy,transformation,Python,Arrays,Numpy,Transformation,我有一个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

我有一个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]])
我想从给定的数组“data”生成数组“result”。实际上,在所需的数组中,零列必须放在中间,然后值朝右方向增加,而值朝左方向减少,如下所示:

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
函数,但没有成功


但是,我不知道如何开始。

那么,我猜您正在尝试将此数组从最小值排序到最大值?从你的问题上看不完全清楚。试试这个

result = []
for row in data:
    result.append(np.sort(row))
您可以使用numpy中的工具轻松地将“结果”再次转换为numpy数组。有关于np.sort的更多信息请查看:

这里的
shift
表示要滚动数据的元素数(正值向右,负值向左)。给定规格,我们希望沿第二维度(
轴=1
)将其向右滚动阵列长度的一半。
/
是整数除法,
data.shape[1]
获取沿第二维度的维度大小(基于零索引)

我认为您缺少了
+180.0
值,而
数据中的
结果中的
值(即您的
结果有13列,但您的
数据只有12列)


这实际上不是基于索引的排序,但是考虑到您尝试过的其他方法,我猜这是您可能想要的类型操作

太好了!认可的。顺便说一句,你能给我解释一下关于数据的更多信息吗?shape[1]//2和axis=1Sure,在这方面添加了一些注释。还可以查看numpy文档以了解更多详细信息。谢谢,我想我知道了。不,实际上我正在寻找@JoshAdel对My bad的回答。很高兴你找到了答案。
np.roll(data, shift=data.shape[1]//2, axis=1)
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.]])