Создайте матрицу переноса веса (или матрицу перехода) для прямого графа (в виде кадра данных pandas) - PullRequest
0 голосов
/ 21 октября 2018

У меня есть padas dataframe:

Я хочу сгенерировать матрицу переноса веса, M (10000 * 10000) для этого графика без использования цикла в python (поскольку циклы занимают много времени) дляРасчет PageRank.Для графика я должен принять каждый столбец кадра в качестве индексов для матрицы, так как оба они имеют значения только до 10000.

    FromNodeId  ToNodeId
0   0   1
1   0   2
2   0   3
3   0   4
4   0   5
5   0   6
6   0   7
7   0   8
8   0   9
9   0   10
10  0   11
11  0   12
12  0   13
13  0   14
14  0   15
15  0   16
16  1   0
17  1   7
18  1   17
19  1   18
20  1   19
21  1   20
22  1   21
23  1   22
24  1   23
25  1   24
26  1   25
27  1   26
28  1   27
29  1   28
... ... ...
37810   9960    0
37811   9960    1273
37812   9960    9960
37813   9961    0
37814   9961    1273
37815   9961    9961
37816   9964    45
37817   9964    3731
37818   9964    6275
37819   9964    9964
37820   9965    6275
37821   9967    0
37822   9967    3950
37823   9967    5242
37824   9967    9967
37825   9968    0
37826   9968    3950
37827   9968    5242
37828   9968    9968
37829   9970    9971
37830   9972    5526
37831   9977    2742
37832   9977    6596
37833   9978    6596
37834   9980    2742
37835   9980    6596
37836   9981    2742
37837   9981    6596
37838   9990    9995
37839   9995    9990

Как мне это сделать в python?

1 Ответ

0 голосов
/ 21 октября 2018

Вы не можете избежать цикла, как в концепции программирования, но вы можете избежать Python for.

matrix = np.zeros(size=(10000,10000))

def func(row):
    global matrix
    matrix[row['FromNodeId'], row['ToNodeId']] = 1
    return row # returning for function sake

df.apply(func)

matrix # now contains all values.
...