[英]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.