簡體   English   中英

按小時和星期幾子集numpy數組

[英]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中對數據進行子集設置 ,但是沒有成功。 任何幫助將不勝感激!!

大概您想對xy進行24乘以7或168組累計計數。 假設您的數據放在N x 4數組gdat 首先,制作周時指數:

whr = 24*gdat[:,2] + gdat[:,3]

現在,您可以選擇一周中每個小時的gdat行。 例如,對於星期日的零時:

gdat0 = gdat[whr == 0]

使用gdat0進行所需的gdat0然后繼續下一個小時。

請注意, unique性可能是計算x, y對出現次數的更快方法。 您可以玩為xy制作復合索引的相同游戲,但是您必須知道它們的界線。 假設x是0到120,而y是0到5,則可以使用位字段創建復合索引:

xy = (gdat0[:,0] << 3) & (gdat0[:,1])

顯然,如果y的范圍較大,則需要移位3位以上,並且可能需要偏移xy以避免負值。

然后,使用unique返回唯一值和xy的值計數。

xyval, xycnt = np.unique(xy, return_counts=True)

然后,您xyval使用xyval >> 3xyval & 7按位運算符從xyval檢索xy值對。

在一周中的每個小時重復一次。 如果N很大,由於存儲將成為問題,因此您可能希望在每次迭代中重用gdat0

編輯:您發布的簡短數據樣本是按時間順序的。 如果所有數據都是按時間順序排列的,則無需每個小時“選擇”。 您所需whr就是為whr每個新值找到索引。 unique(whr, return_index=True)也會為您找到那些!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM