Python: построение разреженной матрицы

#python #matplotlib

#python #matplotlib

Вопрос:

У меня есть разреженная матрица X, форма (6000, 300). Мне бы хотелось что-то вроде диаграммы рассеяния, в которой есть точка, где X (i, j)!= 0, и пробел в противном случае. Я не знаю, сколько ненулевых записей в каждой строке X. X [0] имеет 15 ненулевых записей, X [1] имеет 3 и т.д. Максимальное количество ненулевых записей в строке равно 16.

Попытки:

  • plt.imshow(X) в результате получается высокий, узкий график из-за формы X. Использование plt.imshow(X, aspect='auto) растянет график по горизонтали, но точки растягиваются, превращаясь в эллипсы, и график становится трудночитаемым.
  • ax.spy страдает от той же проблемы.
  • bokeh кажется многообещающим, но на самом деле облагает налогом мое ядро jupyter.

Бонус:

  • Ненулевые элементы X являются положительными вещественными числами. Если бы был какой-то способ отразить их величину, это тоже было бы здорово (например, интенсивность цвета, прозрачность или поперечная цветовая полоса).
  • Каждые 500 строк X принадлежат одному и тому же классу. Это 12 классов * 500 наблюдений (строк) на класс = 6000 строк. Например, X[: 500] из класса A, X [500: 1000] из класса B и т.д. Было бы неплохо раскрасить точки по классам. На данный момент я соглашусь на ручное включение горизонтальных линий каждые 500 строк для разграничения между классами.

Ответ №1:

Вы можете использовать nonzero() для поиска ненулевых элементов и использовать scatter() построение точек:

 import pylab as pl
import numpy as np

a = np.random.rand(6000, 300)
a[a < 0.9999] = 0
r, c = np.nonzero(a)
pl.scatter(r, c, c=a[r, c])
  

Ответ №2:

Мне кажется, что тепловая карта является лучшим кандидатом для такого типа графика. imshow() вернет u цветную матрицу с условными обозначениями цветовой шкалы.

Я не понимаю проблемы с растянутыми эллипсами, разве это не должен быть цветной квадрат для каждой точки данных?

вы можете попробовать цветовую шкалу журнала, если она разрежена. также постройте 12 классов отдельно, чтобы проанализировать, есть ли какие-либо различия между классами.

Ответ №3:

plt.matshow также оказалось возможным решением. Я мог бы также построить тепловую карту с цветовыми полосами и все такое.