Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy将数组分组到嵌套结构_Python_Arrays_Numpy - Fatal编程技术网

Python 使用numpy将数组分组到嵌套结构

Python 使用numpy将数组分组到嵌套结构,python,arrays,numpy,Python,Arrays,Numpy,假设我有一个这样的numpy数组(更大,每个日期的重复次数不同): 现在,我想按日期将列分组为一个更平坦的结构: [ ["2011-01-01", [[24, 554, 66], [44, 524, 62]]], ["2011-01-04", [[23, 454, 32], [22, 45, 42], [14, 364, 12]]] ] 我确实知道如何通过在数组中循环并附加元素来实现这一点,但在我看来这是非常不和谐的。是否有一些内置的numpy函数来

假设我有一个这样的numpy数组(更大,每个日期的重复次数不同):

现在,我想按日期将列分组为一个更平坦的结构:

[              
   ["2011-01-01", [[24, 554, 66], [44, 524, 62]]],
   ["2011-01-04", [[23, 454, 32], [22, 45, 42], [14, 364, 12]]]  
]

我确实知道如何通过在数组中循环并附加元素来实现这一点,但在我看来这是非常不和谐的。是否有一些内置的numpy函数来执行此操作,或者有一些自定义的一行程序来执行此任务?

我不太确定您是如何存储日期的;您给出的示例实际上不起作用,因为日期将被解释为算术。但是,如果您有一个特定的日期
date
,您希望该嵌套数组用于该日期,则可以通过索引轻松获取该日期:

data[ data[:,0]==date, 1: ]
这将选择包含所需日期的每一行,然后只提供数字。如果您希望每个日期都使用此选项,可以使用以下选项:

[ [ date, data[ data[:,0]==date, 1: ] ] for date in np.unique(data[:,0]) ]

请注意,这会将嵌套列表部分作为numpy数组提供给您,但如果您希望将其作为普通列表,则转换将很容易。

这是一个典型的分组问题,可以使用该包高效地解决(免责声明:我是其作者):

虽然目前公认的答案并非不雅观,但它具有二次性能。这个解决方案是nlogn,避免了任何python循环;因此,更多的“numpythonic”:)

[ [ date, data[ data[:,0]==date, 1: ] ] for date in np.unique(data[:,0]) ]
import numpy_indexed as npi
unqiue, groups = npi.group_by(data[:,0], data[:, 1:].astype(np.int))