按小时和星期几来设置numpy数组

时间:2015-11-20 15:29:38

标签: python arrays numpy conditional subset

我有一个包含数百万小时x y点的numpy数组,数组的“列”为x,y,小时和星期几(所有整数)。以下是数组的示例:

if(isset($p[$tag])){
      $this->_mergeCSS($p[$tag], $t);
    }

我创建了一个零网格,我可以为数组中的所有值递增:

array([[1, 2, 0, 0],
       [3, 5, 0, 0],
       [6, 3, 1, 0],
       [6, 2, 3, 0],
       [4, 3, 3, 1]])

但是我需要能够在每周的每个小时(即0小时太阳,小时1小时太阳等)执行此操作。

如何按小时和星期几对数组进行子集化?

我尝试在此处修改答案:Make subset of array, based on values of two other arrays in PythonSubsetting data in Python,但尚未成功。任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

据推测,对于xy对,您想要累计24次7或168组累积计数。假设您的数据位于N x 4阵列gdat中。首先,制作工作时间索引:

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

您现在可以选择一周中每小时的gdat行。例如,对于星期日的零时:

gdat0 = gdat[whr == 0]

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)

然后,您使用按位运算符xyxyval检索xyval >> 3xyval & 7值对。

在一周内每小时重复一次。如果N很大,则存储将成为一个问题,您可能希望在每次迭代时重复使用gdat0

编辑:您发布的短数据样本是按时间顺序排列的。如果您的所有数据都是按时间顺序排列的,那么您就不需要选择&#34;选择&#34;每小时一次。您只需要在whr中找到每个新值的索引。 unique(whr, return_index=True)也可以找到适合你的那些!