gpt4 book ai didi

python - NumPy 数组元素的自定义排列

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:03 27 4
gpt4 key购买 nike

我有一个 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] 获取沿第二维度的维度大小(基于零索引)。

我认为您缺少 dataresult 中的 +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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com