X
에 행이 많지만 유형이 S
인 경우 두 번째 방법을 먼저 확인하는 것이 좋습니다. 가독성 대신 속도에 최적화되어 있습니다. 벡터의 요소가 10 개이면 약 2 배, 벡터의 요소가 1000 개이면 약 200 배 이상 빠릅니다.
첫 번째 방법 (쉽게 읽을 수) :에 관계없이 접근의
, 나는 당신이 이것에 대한 루프 필요가 있다고 생각 :에 루프를 작성하는
hold on
arrayfun(@(n) plot(X(n,1), X(n,2), S{Y(n)}), 1:size(X,1))
또는을의 " 종래의 방식 ":
hold on
for n = 1:size(X,1)
plot(X(n,1), X(n,2), S{Y(n)})
end

,992,967,
두 번째 접근 방법은 (위와 같은 플롯을 제공) : 데이터 집합이 큰
경우에는 다음과 같이 인덱스 X
에 sort_idx
를 사용 [Y_sorted, sort_idx] = sort(Y)
을 정렬 할 수 있습니다 X_sorted = X(sort_idx);
. 그런 다음 X_sorted
을 histc
및 mat2cell
을 사용하여 Y
개의 개별 값에 대해 하나씩 네 그룹으로 나눕니다. 그런 다음 네 개의 그룹을 반복하여 각 그룹을 개별적으로 그립니다.
이렇게하면 데이터의 요소 수에 관계없이 네 개의 값만 반복하면됩니다. 요소 수가 많으면이 속도가 훨씬 빨라집니다.
[Y_sorted, Y_index] = sort(Y);
X_sorted = X(Y_index, :);
X_cell = mat2cell(X_sorted, histc(Y,1:numel(S)));
hold on
for ii = 1:numel(X_cell)
plot(X_cell{ii}(:,1),X_cell{ii}(:,2),S{ii})
end
벤치마킹 :
나는 timeit
를 사용하여 두 가지 방법의 아주 간단한 벤치마킹을했다.
10 개 소자의 경우 :
First approach: 0.0086
Second approach: 0.0037
1,000 요소를 들어 그 결과는 두 번째 접근법은 훨씬 더 빠르다는 것을 보여준다
First approach = 0.8409
Second approach = 0.0039
전에 사용하지 않았으므로 생각하지 않았습니다 ... 이것은 분명히 최고의 답변입니다! +1 =) –
바로 그게 내가 찾고있는 것입니다. 감사 –