Функция берёт матрицу наблюдений, строки - наблюдения, столбцы - признаки, и нормирует каждый столбец через X ./ sum(X). Долго работала без вопросов. Потом пришёл ввод из одной строки.
sum идёт по первой размерности, размер которой не равен 1. У матрицы 1 на n это вторая размерность. Вместо строки сумм по столбцам выходит одно число. Ни ошибки, ни предупреждения.
X = [1 2 3; 4 5 6];
sum(X) % [5 7 9]
X = [1 2 3];
sum(X) % 6, not [1 2 3]
sum(X, 1) % [1 2 3]
Деление прошло молча, делить на скаляр можно всегда. Каждый столбец должен был стать единицей. Вышла строка, отмасштабированная так, чтобы её сумма была единицей. Числа от нуля до единицы, на вид нормальные.
Лечится явной размерностью, sum(X, 1). То же для mean и остальных функций, которые выбирают размерность по данным. Форма результата не должна зависеть от того, сколько строк случайно пришло. Ладно, теперь размерность пишется в каждом вызове, даже там, где приходят только большие матрицы.