我需要找到字符串(或数值向量)中某个特定模式的所有出现的索引。给定的(例如,DataFrame):
z =
15 False
16 False
17 False
18 False
19 False
20 False
21 False
22 False
23 False
24 True
25 True
26 True
27 False
28 False
29 False
30 False
31 False
32 False
33 False
34 False
35 False
36 True
37 False
38 False
39 False
40 True
41 False
42 False
43 False
44 False
45 True
46 True
47 True
48 False
49 False
我感兴趣的是一个函数,它返回一行中所有出现的三个'True'的索引,在这个例子中,我应该得到索引
^{pr2}$在matlab中,strcmp函数非常简单,它正好满足我的需要。我确信Python中也有类似的函数。在
我试图使用'if ['True', 'True', 'True'] in z
:……但我做错了什么。在
UPD我找到了一个非常简单和通用的解决方案,适用于任何数据类型:
def find_subarray_in_array(sub_array, large_array):
large_array_view = as_strided(large_array, shape=(len(large_array) - len(sub_array) + 1, len(sub_array)), strides=(large_array.dtype.itemsize,) * 2)
return where(numpy.all(large_array_view == sub_array, axis=1))[0]
其中“sub_array”是应该在较大的数组“large_array”中找到的模式。在
我假设你的输入是列表:
然后要检查模式[True,True,True]
^{pr2}$然后通过以下方法进行所需的比较:
退货:
尽管可以使用列表理解来实现这一点,但是您失去了使用numpy数组或pandas数据帧的许多优势,特别是可以对操作进行矢量化。更好的方法是使用}是numpy数组):
numpy.correlate
,它允许您比较两个数组,以查看它们的匹配情况。您可以使用它来查找目标(由三个True
值组成的序列)与数组本身完美匹配的所有位置(相关性是3
,因此有3个元素匹配)。这将找到相关性的中心,因此如果要找到起点,则需要从结果中减去一个。因此这将执行您想要的操作(假设inds
和{如果索引总是连续的(例如
^{pr2}$13,14,15,16,...
),可以将其简化为:相关问题 更多 >
编程相关推荐