Узким местом в моей программе является вычисление знака числа для всех чисел в массиве, когда размер массива очень велик. Ниже я покажу два испробованных мной подхода, оба с одинаковыми результатами. У меня 16 ГБ ОЗУ, а массив занимает ~ 5 ГБ. Проблема, которую я вижу, заключается в том, что функция знака занимает много оперативной памяти + виртуальной памяти. Кто-нибудь знает способ уменьшить требования к памяти и ускорить этот процесс для помещения знака ввода массива в вывод массива (см. Ниже)?
Использование цикла for с командами if или switch не требует нехватки памяти, но занимает час (слишком долго).
size = 1e9; % size of large array (just an example, could be larger)
output = int8(zeros(size,1)-1); % preallocate to -1
input = single(rand(size,1)); % create random array between 0 and 1
scalar = single(0.5); % just a scalar number, set to 0.5 (midpoint) for example
% approach 1 (comment out when using approach 2)
output = int8(sign(input - scalar)); % this line of code uses a ton of RAM and virtual memory
% approach 2
output(input>scalar) = 1; % this line of code uses a ton of RAM and virtual memory
output(input==scalar) = 0; % this line of code uses a ton of RAM and virtual memory
Спасибо заранее за любые предложения.