У меня есть строка кода в Matlab, который читает:Как уменьшить требования к памяти функции «найти» Matlab?
output = find(input);
, где вектор-столбец «выход» содержит все индексы в векторе-столбце «вход», элементы которой равны нулю. Например, если:
input = [1 3 4 0 0 2 0];
затем результат, output = find (input); будет:
output =
1
2
3
6
, соответствующий 1 ("1"), 2-й ("3"), 3 ("4") и 6 ("2") индексы массива "вход", которые отличны от нуля ,
Поскольку мой массив «ввода» очень велик, эта строка кода потребляет всю мою локальную ОЗУ плюс огромную часть виртуальной памяти, заставляя систему замедляться при сканировании.
Кто-нибудь знает хороший способ (или каким-либо образом) уменьшить требования к памяти для такой операции? Я думал о том, чтобы поместить код «найти» в цикле, но поскольку размер массива «output» (и, следовательно, индексация этого массива) зависит от результата операции «Найти», я не вижу, как это возможно Сделай так. Из идей.
Заранее благодарим за любые комментарии/предложения. -gkk
Благодаря Jonas, мне нравятся ваши первые 2 строки кода выше, очень умно! К сожалению, размер массива составляет 16 ГБ (уже с использованием класса uint32), и у меня всего 10 ГБ локальной оперативной памяти. Я попытаюсь использовать вашу технику на куски, чтобы извлечь ненулевые элементы, очистить «ввод» и скомпоновать куски (возможно, это сработает). – ggkmath
@ggkmath: Я добавил предложение о том, как вы можете выполнить операцию в джонках. – Jonas
Спасибо, Джонас, я думаю, что в одной из строк есть опечатка (ей не хватает +1) и следует читать: out {i} = (i-1) * blockLength + 1: i * blockLength. Хорошо работает, спасибо – ggkmath