[英]Subsetting numpy array by hour and day of week
我有一个包含数百万小时xy点的numpy数组,该数组的“列”为x,y,小时和星期几(所有整数)。 这是数组的示例:
array([[1, 2, 0, 0],
[3, 5, 0, 0],
[6, 3, 1, 0],
[6, 2, 3, 0],
[4, 3, 3, 1]])
我创建了一个零位网格,可以为数组中的所有值递增:
grid = np.zeros((8,8))
for value in range(0,len(xy_new[:,1])):
grid[xy_new[value][1],xy_new[value][0]] += 1
但我需要能够在每周的某天的每个小时执行此操作(例如,Sun在0小时,Sun在1小时等)。
如何按小时和星期几对数组进行子集化?
我试图在这里修改答案: 根据Python中另外两个数组的值创建数组的 子集,在Python中对数据进行子集设置 ,但是没有成功。 任何帮助将不胜感激!!
大概您想对x
和y
进行24乘以7或168组累计计数。 假设您的数据放在N
x 4数组gdat
。 首先,制作周时指数:
whr = 24*gdat[:,2] + gdat[:,3]
现在,您可以选择一周中每个小时的gdat
行。 例如,对于星期日的零时:
gdat0 = gdat[whr == 0]
使用gdat0
进行所需的gdat0
然后继续下一个小时。
请注意, unique
性可能是计算x, y
对出现次数的更快方法。 您可以玩为x
和y
制作复合索引的相同游戏,但是您必须知道它们的界线。 假设x
是0到120,而y
是0到5,则可以使用位字段创建复合索引:
xy = (gdat0[:,0] << 3) & (gdat0[:,1])
显然,如果y
的范围较大,则需要移位3位以上,并且可能需要偏移x
和y
以避免负值。
然后,使用unique
返回唯一值和xy
的值计数。
xyval, xycnt = np.unique(xy, return_counts=True)
然后,您xyval
使用xyval >> 3
和xyval & 7
按位运算符从xyval
检索x
和y
值对。
在一周中的每个小时重复一次。 如果N
很大,由于存储将成为问题,因此您可能希望在每次迭代中重用gdat0
。
编辑:您发布的简短数据样本是按时间顺序的。 如果所有数据都是按时间顺序排列的,则无需每个小时“选择”。 您所需whr
就是为whr
每个新值找到索引。 unique(whr, return_index=True)
也会为您找到那些!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.