In [256]: t1
Out[256]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 50 stored elements in COOrdinate format>
In [257]: t2
Out[257]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 50 stored elements in COOrdinate format>
При построении графика t1.todense().flatten()
вы строите точки данных для всех элементов t1
, будь то ноль или нет. В этом случае 100 баллов.
Один из способов «отсеять» нулевые элементы:
In [258]: t3 = t1.multiply(t2)
In [259]: t3
Out[259]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 28 stored elements in Compressed Sparse Row format>
In [260]: t11 = t3.astype(bool).multiply(t1)
In [261]: t21 = t3.astype(bool).multiply(t2)
In [262]: t11
Out[262]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 28 stored elements in Compressed Sparse Row format>
t3
имеет ненулевые значения, где t1
и t2
отличны от нуля. t11
имеет соответствующие элементы t1
(t3
float становится булевым True и неявно 1 в умножении.) Разреженный multiply
относительно эффективен (может быть не так много, как соответствующее плотное умножение или даже разреженная матрица умножать).
Мы могли бы построить t11.todense.ravel()
и т. Д. Это было бы то же самое, за исключением концентрации значений, как (0,0, 0,0). Но атрибут data
имеет ненулевые значения, и разреженность t11
и t21
одинакова, поэтому мы можем просто построить эти - только 28 значений в этом случае:
plt.plot(t11.data,
t21.data,
'ko',
alpha=0.1);
Могут быть и другие способы получения матриц t11
и t21
, но основная идея по-прежнему применима - получить две матрицы с одинаковой разреженностью и построить только их значения data
.
t1vst2
">
t11.data vs t21.data
">