Вопрос по 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   ответа
11

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

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

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

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

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

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