2017-02-01 13 views
0

Я работаю с данными XShooter и для галактических исправлений, я использую ccm_unred в MATLAB. Проблема заключается вОграничение большого массива до 1D в MATLAB

funred = flux*10.^(0.4*A_lambda); 

эта строка кода генерирует 29686 X 29686 double массив. Я хочу только одну его часть, я могу сделать это, переназначив funred как funred = funred(:,1), но этот кусок кода также принимает 57 seconds, и он слишком сильно использует мой процессор и ОЗУ, чтобы мой ноутбук оставался стабильным. Есть ли какой-либо метод, с помощью которого я могу ограничить генерацию funred только (:,1) с самого начала?

ответ

0

Вы говорите, что ваш код генерирует матрицу 29686 X 29686, однако вы выполняете элементарные операции в своем уравнении. Это означает, что либо flux, либо A_lambda bust be 29686 X 29686. Просто нарежьте те, которые этого размера!

Предполагая, что один из них 29686 X 29686

funred = flux(:,1)*10.^(0.4*A_lambda(:,1)); 

Просто удалите (:,1) в тот, который не является матрицей.

Если они оба являются матовыми, то вы не можете этого сделать, так как flux*... понадобится вся матрица для работы.

+0

Существует одна матричная манипуляция, поэтому, хотя я согласен, что это работает, если у вас есть только одна матрица, я думаю, что это неверно в том случае, если они оба являются матрицами. Я думаю, вам понадобится 'funred = flux * 10.^(0.4 * A_lambda (:, 1))', если оба являются матрицами. –

+0

@DennisJaheruddin, вы правы. –

+0

@AnderBiguri большое спасибо. Проблема заключалась в том, что «A_lambda», у меня было еще две строки «funred» в коде, и я боялся, что произойдет. Время потребления теперь '0,8 секунды' :-) –

Смежные вопросы