假设我有
bins = np.array([0, 0, 1, 1, 2, 2, 2, 0, 1, 2])
vals = np.array([8, 7, 3, 4, 1, 2, 6, 5, 0, 9])
k = 3
Run Code Online (Sandbox Code Playgroud)
我需要通过唯一bin中的最大值的位置bins.
# Bin == 0
# ? ? ?
# [0 0 1 1 2 2 2 0 1 2]
# [8 7 3 4 1 2 6 5 0 9]
# ? ? ?
# ?
# [0 1 2 3 4 5 6 7 8 9]
# …Run Code Online (Sandbox Code Playgroud) 我有一个包含 0 和 1 的矩阵,并且想要在每列上做一个 cumsum,只要观察到零,它就会重置为 0。例如,如果我们有以下内容:
df = pd.DataFrame([[0,1],[1,1],[0,1],[1,0],[1,1],[0,1]],columns = ['a','b'])
print(df)
a b
0 0 1
1 1 1
2 0 1
3 1 0
4 1 1
5 0 1
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
print(df)
a b
0 0 1
1 1 2
2 0 3
3 1 0
4 2 1
5 0 2
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试时df.cumsum() * df,我能够正确识别 0 元素,但计数器不会重置:
print(df.cumsum() * df)
a b
0 0 1
1 1 2
2 0 3
3 2 0
4 …Run Code Online (Sandbox Code Playgroud) 我试图找到掩码段的索引。例如:
mask = [1, 0, 0, 1, 1, 1, 0, 0]
segments = [(0, 0), (3, 5)]
Run Code Online (Sandbox Code Playgroud)
当前的解决方案看起来像这样(而且速度很慢,因为我的掩码包含数百万个数字):
segments = []
start = 0
for i in range(len(mask) - 1):
e1 = mask[i]
e2 = mask[i + 1]
if e1 == 0 and e2 == 1:
start = i + 1
elif e1 == 1 and e2 == 0:
segments.append((start, i))
Run Code Online (Sandbox Code Playgroud)
有没有办法用 numpy 有效地做到这一点?
我唯一设法谷歌的是numpy.ma.notmasked_edges,但它看起来不像我需要的。
所以我在2 天前创建了这篇关于我的问题的帖子,谢天谢地得到了答案。
我有一个由 20 行和 2500 列组成的数据。每一列都是一个独特的产品,行是时间序列,测量结果。因此每个产品测量 20 次,就有 2500 个产品。
这次我想知道有多少连续行我的测量结果可以保持在特定阈值之上。又名:我想计算高于某个值的连续值的数量,假设为 5。
A = [1, 2, 6 , 8 , 7 , 3, 2, 3, 6 , 10 , 2, 1, 0, 2] 我们以粗体显示这些值,根据我上面的定义,我应该得到 NumofConsFeature = 3 作为结果。(如果满足条件的系列超过1个,则取最大值)
我想过使用 .gt 进行过滤,然后获取索引并在之后使用循环来检测连续的索引号,但无法使其工作。
在第二阶段,我想知道连续系列的第一个值的索引。对于上面的示例,这将是 3。但我不知道如何实现这一点。
提前致谢。