自定义排列NumPy数组元素

时间:2014-08-27 16:35:53

标签: 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.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个功能但没有成功。

然而,我想不出如何开始。

2 个答案:

答案 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

的更多信息