为了账号安全,请及时绑定邮箱和手机立即绑定

对二维 numpy 数组的部分进行排序

对二维 numpy 数组的部分进行排序

慕神8447489 2021-10-10 16:03:26
所以我有一个尺寸为 (8760,12) 的 numpy 数组 A。基本上都是12年的时间。我需要在数组中对每年的每个月(730 小时)进行排序。我还没有找到任何方法可以在数组中做到这一点。所以我的解决方案是每个月取出,排序,然后再次创建整个二维数组。我正在考虑按照我下面的方法做一些事情,但它不起作用。total=np.zeroes([8760,12])for j in range(1,12):    for i in range (1,12):        #here i take out every month of every year        month=A[730*(i-1):-730*(12-i),(j-1):-(12-j)]        #here I sort the data        month_sorted=np.sort(month,axis=0,kind='quicksort')        #here I try to add the sorted months back into 1 big array        np.concatenate(total,month_sorted,axis=0)    np.concatenate(total,month_sorted,axis=1)Concatenate 不适用于不同大小的数组。而且我真的没有办法将第 2 年的月份放在数组的第 2 行。我想它应该通过索引 idx 或 iloc 或类似的东西来完成。编辑:我的值是整数。结果应该是每行每 730 个(一个月中的小时数)值从低到高排序的值。所以想象一下,我会有 3 年而不是 12 小时和 9 小时而不是 8760 小时,它们必须每 3 小时而不是每 730 小时进行一次排序。该数组如下所示:[[30,40,10,20,50,60,80,200,100][8,20,5,6,8,1,5,3,2][520,840,600,525,430,20,1,506,703]]并应转换为:[[10,30,40,20,50,60,80,100,200][5,8,20,1,6,8,2,3,5][520,600,840,20,430,525,1,506,703]]所以我当前的代码取出第一部分 30,40,10 并将其排序为 10,30,40。但我无法解决的部分是如何从 2 个循环中的所有较小数组再次创建大数组。
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您可以避免完全循环。


首先转置和重塑数组,使数组索引从粗到细(年-> 月-> 小时)。


A = np.transpose(A)

A = np.reshape(A, [12, 12, 730])

现在您可以选择一个月的所有时间作为 A[year, month]


方便的是,该np.sort函数默认沿数组的最后一个轴排序,因此您只需调用


A = np.sort(A)

现在每个A[year, month]条目列表都将被排序。


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信