Странная ошибка в создании матрицы совпадений в Python

Я пытаюсь создать матрицу совпадений в Python, которая выводит число, которое слова L1 появляются в грушах (cat co = np . Zeros (( 5 , 5 )) # матрица L1 = [ 'cat' , 'dog' , 'house' , 'tree' , 'car' ] #tags L2 = [ 'cat car dog' , 'cat house dog' , 'cat car' , 'cat dog' ] #photo text n = 0 # будет содержать сумма каждого события для l в диапазоне ( len ( L1 )): для j в диапазоне ( len ( L1 )): для s в диапазоне ( len ( L2 )): #find появление, но не на тех же словах, если L1 [ i ] в L2 [ s ] и L1 [ j ] в L2 [ s ] и L1 [ i ] ! = L1 [ j ]: n + = 1 # суммировать количество событий #output = L1 [i], L1 [j] # L2 [s] #print output co [ i ] [ j ] = s #add для матрицы print co , дом кошки, дерево кошек и т. д.) в [[ 0. 3. 1. 0. 2. ] [ 3. 0. 1. 0. 1. ] [ 1. 1. 0. 0. 0. ] [ 0. 0. 0. 0. 0. ] [ 2. 1. 0. 0. 0. ]] , мой код до сих пор:

[[ 0.  3.  1.  0.  2.]
 [ 3.  0.  1.  0.  0.]
 [ 1.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 2.  0.  0.  0.  0.]]

Выход должен быть

output = L1[i], L1[j] # L2[s]
print output
    ('cat', 'dog')
    ('cat', 'dog')
    ('cat', 'dog')
    ('cat', 'house')
    ('cat', 'car')
    ('cat', 'car')
    ('dog', 'cat')
    ('dog', 'cat')
    ('dog', 'cat')
    ('dog', 'house')
    ('dog', 'car')
    ('house', 'cat')
    ('house', 'dog')
    ('car', 'cat')
    ('car', 'cat')
    ('car', 'dog')

Но вместо этого:

co[i][j] = s

У каждой второй строки есть ошибка ... Если часть работает хорошо, я проверил вывод:

car

Итак, я думаю, что что-то происходит при подаче матрицы ?:

dog

Какие-либо предложения???

python,numpy,matrix,

1

Ответов: 1


4 принят

Это дает правильный результат, потому что у вас есть 0и dogв первом элементе L2которого есть 0индекс.

Вот более пифонический подход, который получает индекс, основанный на первом вхождении пар в L2:

In [158]: L2 = ['cat car dog', 'cat house dog', 'cat car', 'cat dog']

In [159]: L2 = [s.split() for s in L2]

In [160]: combinations = np.column_stack((np.repeat(L1, 5), np.tile(L1, 5))).reshape(5, 5, 2)
# with 0 as the start of the indices
In [162]: [[next((i for i, sub in enumerate(L2) if x in sub and y in sub), 0) for x, y in row] for row in combinations]
Out[162]: 
[[0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]
# with 1 as the start of the indices
In [163]: [[next((i for i, sub in enumerate(L2, 1) if x in sub and y in sub), 0) for x, y in row] for row in combinations]
Out[163]: 
[[1, 1, 2, 0, 1],
 [1, 1, 2, 0, 1],
 [2, 2, 2, 0, 0],
 [0, 0, 0, 0, 0],
 [1, 1, 0, 0, 1]]
питон, NumPy, матрица,
Похожие вопросы