用csc_matrix()的時候遇到個問題,一個位置本該爲1的卻是其他數,通常比預期大,造成結果不對。
查了存儲數的data,裏面也沒有這個數。
後來終於發現,如果有相同索引,它的值是累加的,這就造成結果不對。
看看實例
------------------------------------------------------------------------
使用csc_matrix()的最簡單版本
row, col, data
r = [1,2,3,4]
l = [1,2,3,4]
v = [1,1,1,1]
csc_matrix((v, (r, l))).toarray()
結果
array([[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]], dtype=int64)
這結果正確,1,1對應1; 2,2對應 1
換個數
r = [1,2,3,4,1]
l = [1,2,3,4,1]
v = [1,1,1,1,1]
csc_matrix((v, (r, l))).toarray()
現在索引[1, 1]的位置對應了兩次,結果就是1+1=2