文字列(または数値ベクトル)内の特定のパターンのすべての出現のインデックスを見つける必要があります。例えば、ブールリスト(データフレーム)与えられた:matlabish "strncmp" in python
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
私はこの例では、行に3「真」のすべての出現のインデックスを返す関数に興味が、私はインデックスを取得する必要が
>> result = some_function(z)
>> print result
>> [24, 45]
matlabでは、strcmpという関数を使うのは簡単ですが、これは私が必要とするものです。 Pythonにも同様の機能があると確信しています。
私は 'if ['True', 'True', 'True'] in z
:....を使用しようとしましたが、間違っています。
UPD Iは、任意のデータ型で動作し、このような問題を非常に簡単で一般的な解決策を見つけた:「sub_array」が大きいアレイ「large_array」に見出さなければならないパターンである
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]
。
@ arnoldklein、このアプローチはあなたのために働くのですか? –
@ RahukMadhavan、そうですが、理想的には、 "inds"を明示的に使用すべきではありません。基本的に、True/Falseの1Dimリスト(INDなし)を指定すると、インデックスを返す必要があります。しかし、ありがとう、私はあなたの助けに感謝します。 –
インデックスだけが必要な場合は、inds [i]をiと置き換えてください。 –