2016-11-01 2 views
0

Я вижу этот вопрос: How do I divide matrix elements by column sums in MATLAB?Как делить матричные элементы на * ненулевые * суммы столбцов в MATLAB?

Но кроме того, я хочу сделать разделение только если сумма столбца (sum(A)) отлична от нуля.
Будет ли работать какой-либо из перечисленных методов, кроме цикла, поскольку он очень медленный для моего размера матрицы?

ответ

1

Все, что вам нужно это делать удалить нулевые элементы из sum(A) с промежуточным шагом:

col_sum = sum(A); 
col_sum(col_sum == 0) = 1; % no zeros 

Теперь вы можете использовать любой метод в the linked post, например, используя bsxfun:

B = bsxfun(@rdivide, A, col_sum);  

С вычислительной точки зрения, исключая только те элементы, которые точно нулю, когда A тип с плавающей точкой, это не очень хорошая практика. Вместо этого вы можете устранить все близко к нулю элементов:

col_sum(abs(col_sum) < 1e-10) = 1;