Я думаю, что ответ является размер результирующего массива, как Rody предложил:
>> mlf=sparse([],[],[],2^31+1,1); mlf(1)=1; size(mlf(mlf>0))
ans =
1 1
>> mlf=sparse([],[],[],2^31+1,1); mlf(1)=1; size(mlf)
ans =
2147483649 1
* EDIT 1: Индексация работает правильно:
>> mlf(mlf>0) = 2
mlf =
(1,1) 2
Это функционально эквивалентно использованию find
>> mlf(find(mlf)) = 2
mlf =
(1,1) 2
Похоже, что хороший вывод о том, что display
форматирует выход с достаточным пространством для элемента в (2147483649,1)
, , но только при индексировании для назначения этому элементу (думаю, lvalue vs rvalue).
* EDIT 2: Если вы собираетесь после этих элементов в полном (не разреженный) переменной, используйте full
:
>> full(mlf(mlf>0))
ans =
1
* EDIT 3: Для того, чтобы назначить до последнего элемента в соответствии с размеры mlf
, а не до последнего ненулевого элемента,
>> mlf(numel(mlf))=77
mlf =
(1,1) 1
(2147483649,1) 77
* EDIT 4 : Для того, чтобы удалить отрицательные значения:
mlf(mlf<0)=0; % or mlf(find(mlf<0)) = 0;
Если вы хотите, чтобы сделать копию и удалить негативы:
mlf2 = mlf;
mlf2(mlf2<0) = 0;
mlf3 = mlf;
mlf3(mlf3>0) = 0;
Тогда у вас есть mlf
со всеми значениями, mlf2
только с позитивов и mlf3
только с негативов , Ключевым моментом в этом является то, что размер остается таким же, как у оригинала mlf
, поэтому вы можете использовать такие вещи, как end
, оригинальным способом, основанным на размере разреженного, ура!
Первая команда печатает всю матрицу, а вторая команда печатает ее часть (обратите внимание, что 'mlf (mlf> 0)' - новая анонимная переменная). Моя * догадка * заключается в том, что 'disp'' разреженного' учитывает, что максимальный индекс в нем может быть '(2147483649,1)', на который 'disp' корректирует свой интервал. Анонимная переменная имеет больше доступной информации (например, она составляет всего 1 элемент), поэтому * ее '' disp' будет иметь меньшее расстояние. Также как общий интерес: как и почему ваш код зависит от * отображаемой * версии «разреженной»? –
Ах, нет, я неправильно понял ваш вопрос (просто освежился). Как я уже сказал, 'mlf' является' 2147483649x1' разреженным с 1 заполненным значением, тогда как 'mlf (mlf> 0)' является новой анонимной переменной размером 1x1 (все еще «разреженной»). Введите 'whos ans' после последней команды, чтобы проверить это. –
@RodyOldenhuis Команда не показывает разницы: http://stackoverflow.com/a/19735613/164148 – hhh