Вопрос по default-value, r, sparse-matrix, na – Создание (и доступ к) разреженной матрицы с записями по умолчанию NA

14

Узнав оварианты работы с разреженными матрицами в RЯ хочу использоватьматрица пакет для создания разреженной матрицы из следующего фрейма данных и иметь все остальные элементы.NA

     s    r d
1 1089 3772 1
2 1109  190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109   38 7

Я знаю, что могу создать разреженную матрицу со следующими элементами, как обычно:

> library(Matrix)
> Y  Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0

но если я хочу, чтобы значением по умолчанию было NA, я попробовал следующее:

  M  system.time(M[3,3])
   user  system elapsed 
  0.660   0.032   0.995 

Как я должен создавать эту матрицу? Почему с одной матрицей гораздо медленнее работать?

Вот's фрагмент кода для вышеуказанных данных:

X 

Ваш Ответ

2   ответа
16

матрицы только разрежены, если они имеют нулевые ячейки. Поскольку NA - ненулевое значение, вы теряете все выгоды от разреженной матрицы. Классическая матрица еще более эффективна, если в матрице почти нет нулей. Классическая матрица похожа на вектор, который будет вырезан в соответствии с размерами. Таким образом, он должен хранить только вектор данных и размеры. Разреженная матрица хранит только ненулевые значения, но также сохраняет там местоположение. Это преимущество, если и только если у вас достаточно нулевых значений.

Но если мойдефолт" значение равно 1, тогда, конечно, у вас есть только 1 дополнительный бит информации для хранения, то есть, что по умолчанию 1 вместо предположения 0. Я все еще храню "отличается от значения по умолчанию значения, как вы делаете в примере 0, но предпосылка гораздо более общая. " adunaic
Да, я полагаю, чтоэто правда. Christopher DuBois
Это преимущество, если и только если у вас достаточно нулевых значений. ": Просто не правда. Заменить каждый случай "нуль" в вашем комментарии от "один" или любой другой номер, и вы увидите, что ваше предложение все еще в силе. Тот факт, что ноль используется, просто по соглашению, и есть много приложений, где имеет смысл иметь значения по умолчанию, отличные от нуля. С точки зрения экономии памяти имеет смысл установить значение по умолчанию на число, которое чаще всего встречается в вашем наборе данных. derwiwie
11

Тьерриs ответ определенно верно, я могу сказать, как соавторМатрица» пакет ...

На ваш другой вопрос: почему доступ к "М" медленнее, чем "Y"? Основной ответ заключается в том, что "М" намного более разреженный, чем "Y" следовательно, он намного меньше и - в зависимости от размеров и оперативной памяти вашей платформы - время доступа намного меньше для объектов меньшего размера, особенно для их индексации.

Я согласен с @ Quantum7: в науках о жизни, например, "0" не всегда значит "нет информации", Попарное сходство 0 между двумя объектами несет информацию о том, что они не одинаковы. Принимая во внимание, что АН означает, что мы просто нене знаю, насколько они похожи (часто это бывает в биологических данных). Было бы разумно не автоматически выравнивать 0 == отсутствует и позволить пользователю передать желаемое значение по умолчанию (например, NA). С точки зрения улучшения памяти это должен быть тот, который чаще всего встречается в наборе данных. На мой взгляд, это ограничение вашей реализации, а не общее. derwiwie
К сожалению, все ненулевые ячейки всегда сохраняются. Было бы неплохо иметь возможность указать значение по умолчанию, отличное от нуля, для sparseMatrix. Quantum7
Спасибо! Я с нетерпением жду новых ответов на StackOverflow. Я'постараюсь задрать некоторые вопросы, которые ямы имели при использовании Matrix ... Christopher DuBois
Я думаю о том, есть ли значение по умолчанию для sparseMatrix? hs3180

Похожие вопросы