Нет, невозможно переопределить sparse
для использования других значений. Что вы можете сделать, хотя и требует много времени и памяти, так это использовать accumarray
:
x_ind; % I presume this to contain the column index of the number
y_ind; % I presume this to contain the row index of the number
value; % I presume this to contain the value (0 or 1)
new_mat = accumarray([x_ind y_ind],value,[],[],-1);
new_mat
теперь будет содержать заданные вами значения 0
и 1
, а во всех остальных местах будет иметь -1
. Вам не нужно устанавливать аргумент size
(третий), так как он просто создаст матрицу размера max(x_ind) x max(y_ind)
, если вы поставите []
. Четвертый входной аргумент, функция, также может быть пустым, поскольку каждая комбинация x_ind
и y_ind
будет содержать только одно значение, поэтому по умолчанию достаточно mean
.
Пример:
A = [0 1 ; -1 0];
x_ind = [1;2;2];
y_ind = [1;1;2];
value = [0;1;0];
new_mat = accumarray([x_ind y_ind],value,[],[],-1);
new_mat =
0 1
-1 0
Другой метод, который я бы предпочел, состоит в том, чтобы просто добавить единицу ко всем значениям, таким образом сделав 1 2 и установив 0 в 1. Таким образом -1 сопоставляется с 0, и поэтому вы в любом случае можете использовать sparse
. В примере это установит A = [1 2;0 1]
, который вы можете вызвать с вашими соответствующими значениями, используя A-1
.
Просто примечание: sparse
хранит три значения для каждого элемента (строка, столбец, значение) плюс некоторые накладные расходы. Таким образом, если ваша матрица пуста менее чем на 70 %, sparse
на самом деле потребляет больше памяти, чем обычная полная матрица.
person
Adriaan
schedule
07.09.2015
A = sparse([1 2], [4 1], [1 2])
и изменить свой код, чтобы вместоA
использоватьA-1
? (но не явно, иначе вы можете потерять разреженность) - person Luis Mendo   schedule 07.09.2015