관측 행렬을 받아 각 열을 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]
나눗셈은 조용히 지나갔다. 스칼라로 나누는 건 언제나 허용된다. 모든 열이 1로 나와야 했다. 실제로 나온 건 합이 1이 되도록 줄인 행이었다. 0과 1 사이의 숫자라 멀쩡해 보였다.
고치는 법은 차원을 명시하는 것, sum(X, 1)이다. mean을 비롯해 데이터를 보고 차원을 고르는 함수들도 마찬가지다. 결과의 모양이 우연히 들어온 행 수에 따라 달라지면 안 된다. 알았다, 이제 큰 행렬만 받는 호출까지 전부 차원을 적는다.