私はcython
関数を作成しようとしています。これは2つのnumpy配列の文字列を繰り返し処理し、そこにあるデータから新しいdictsリストを作成します。cythonのループでC++マップを作成する
私はcythonからC++を使い、これらのnumpy配列を繰り返して、私が行ったようにマップのベクトルを構築すると思っていました。私は各反復で空のマップを作成する方法を理解できないようです。
私はこのような何かをしたいと思います:
def extract_data(words_seq, labels_seq, max_sentence_len):
cdef int i
cdef vector[map[string, vector[string]]] data
cdef vector[string] new_entry
data = []
for i in range(len(words_seq)):
cdef map[string, vector[string]] new_row_map = {}
labels = labels_seq[i]
words = words_seq[i]
for j in range(max_sentence_len):
label = labels_seq[i][j]
word = words_seq[i][j]
if label == 'junk':
continue
elif new_row_map.count(label) == 0:
new_entry = [word]
new_row_map[label] = new_entry
else:
new_row_map[label].push_back(word)
data.push_back(new_row_map)
return data
しかし、私はエラーcdef statement not allowed here
を取得します。また、私は空のマップを宣言するためにdictリテラルを使用して私を好きではありません。
どのようにすれば、各繰り返しで新しいマップを作成できますか?ループの外側で 'new_entry'を宣言すると、各繰り返しで同じマップに新しいエントリが追加されてしまいます。 – Luke