使用 numpy 将数据分组为时间相关的集合
Group data into time dependent sets using numpy
给定一组二维数据 [Time, Value] 我想将其分成类似的组,但按时间顺序排列。我已经在使用 numpy 和 pandas,所以两者的方法都很棒。
原文:
Foo = np.array([[0,A],[1,A],[2,A],[3,B],[4,B]
[5,A],[6,A],[7,B],[8,B],[9,B],[10,A]....]])
分成:
bar = np.array([[0,A],[1,A],[2,A]])
baz = np.array([[3,B],[4,B]])
qux = np.array([[5,A],[6,A]])
arr = np.array([[7,B],[8,B],[9,B]])
wiz = np.array([[10,A],......]])
假设你的意思是 A
和 B
是值,如果你的分组逻辑是放置每个值的连续序列,你可以只使用 itertools.groupby
分成不同的组。
具体(包括修复示例代码中的括号和逗号错误,并为 A
和 B
添加一些虚拟值):
A = 1.0
B = 2.0
Foo = np.array([[0,A],[1,A],[2,A],[3,B],[4,B],
[5,A],[6,A],[7,B],[8,B],[9,B],[10,A]])
from itertools import groupby
groups = [np.array(list(v)) for k,v in groupby(Foo, lambda x: x[1])]
现在您所说的 bar
将变成 groups[0]
,依此类推。如果你想自动给它们命名,建议不要尝试在顶层使用某种 locals()
或 globals()
技巧来做到这一点,而只是列出名称并使用 dict
:
names = ['bar', 'baz', 'qux', 'arr', 'wiz']
named_groups = {names[i]:groups[i] for i in range(len(groups))}
现在named_groups['bar']
returns你以前叫什么bar
。
或者,如果你能保证组的精确数量,你可以使用tuple
解包一步命名它们:
(bar,
baz,
qux,
arr,
wiz) = [np.array(list(v)) for k,v in itertools.groupby(Foo, lambda x: x[1])]
(注意:我已经 never gotten a great answer 关于 PEP 8 可能会说的关于需要有很多(可能命名冗长)元组元素在 left[ 上解包的最佳实践=43=] =
)
一侧
这仍然可以让您将组绑定到顶级变量名称,但正确地强制您明确说明有多少这样的变量,避免尝试动态分配变量的不良做法。
给定一组二维数据 [Time, Value] 我想将其分成类似的组,但按时间顺序排列。我已经在使用 numpy 和 pandas,所以两者的方法都很棒。
原文:
Foo = np.array([[0,A],[1,A],[2,A],[3,B],[4,B]
[5,A],[6,A],[7,B],[8,B],[9,B],[10,A]....]])
分成:
bar = np.array([[0,A],[1,A],[2,A]])
baz = np.array([[3,B],[4,B]])
qux = np.array([[5,A],[6,A]])
arr = np.array([[7,B],[8,B],[9,B]])
wiz = np.array([[10,A],......]])
假设你的意思是 A
和 B
是值,如果你的分组逻辑是放置每个值的连续序列,你可以只使用 itertools.groupby
分成不同的组。
具体(包括修复示例代码中的括号和逗号错误,并为 A
和 B
添加一些虚拟值):
A = 1.0
B = 2.0
Foo = np.array([[0,A],[1,A],[2,A],[3,B],[4,B],
[5,A],[6,A],[7,B],[8,B],[9,B],[10,A]])
from itertools import groupby
groups = [np.array(list(v)) for k,v in groupby(Foo, lambda x: x[1])]
现在您所说的 bar
将变成 groups[0]
,依此类推。如果你想自动给它们命名,建议不要尝试在顶层使用某种 locals()
或 globals()
技巧来做到这一点,而只是列出名称并使用 dict
:
names = ['bar', 'baz', 'qux', 'arr', 'wiz']
named_groups = {names[i]:groups[i] for i in range(len(groups))}
现在named_groups['bar']
returns你以前叫什么bar
。
或者,如果你能保证组的精确数量,你可以使用tuple
解包一步命名它们:
(bar,
baz,
qux,
arr,
wiz) = [np.array(list(v)) for k,v in itertools.groupby(Foo, lambda x: x[1])]
(注意:我已经 never gotten a great answer 关于 PEP 8 可能会说的关于需要有很多(可能命名冗长)元组元素在 left[ 上解包的最佳实践=43=] =
)
这仍然可以让您将组绑定到顶级变量名称,但正确地强制您明确说明有多少这样的变量,避免尝试动态分配变量的不良做法。