train = np.zeros([26,26])
train2 = np.zeros([26,26])
tmp = [1,2,3,4,5,6,1,2,3,4,5,6]
train[tmp[0:-1], tmp[1:]] += 1
for i in range(len(tmp)-1):
train2[tmp[i], tmp[i+1]] += 1
print(np.sum(train - train2))
выход -5
Я обнаружил, что train
не равно train2
когда в tmp
есть несколько повторяющихся кортежей. Что-то не так с нарезкой numpy.
И вам того же.
Вы знаете, что дважды пытаетесь записать в «одну и ту же позицию», например [1, 2]
. К сожалению (или к счастью, в зависимости от точки зрения) это не работает.
Но вы можете использовать np.add.at
который в соответствии с документами «Для добавления ufunc этот метод эквивалентен a [index] + = b, за исключением того, что результаты накапливаются для элементов, которые проиндексированы более одного раза.»:
train = np.zeros([26,26])
np.add.at(train, [tmp[:-1], tmp[1:]], 1)
Спасибо!
Самый полезный комментарий
Вы знаете, что дважды пытаетесь записать в «одну и ту же позицию», например
[1, 2]
. К сожалению (или к счастью, в зависимости от точки зрения) это не работает.Но вы можете использовать
np.add.at
который в соответствии с документами «Для добавления ufunc этот метод эквивалентен a [index] + = b, за исключением того, что результаты накапливаются для элементов, которые проиндексированы более одного раза.»: