Python NumPy数组元素的自定义排列
我有一个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
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.]])