capi = cell2mat(arrayfun(@(b) sum(resulti == b,1),nonzeros(unique(resulti)), 'UniformOutput', false))
그 코드를 사용하면 코드가 실행되지 않고 다음 명령과 같은 명령이 표시됩니다.이 명령의 의미는 무엇입니까
??? Array dimensions must match for binary array op.
capi = cell2mat(arrayfun(@(b) sum(resulti == b,1),nonzeros(unique(resulti)), 'UniformOutput', false))
그 코드를 사용하면 코드가 실행되지 않고 다음 명령과 같은 명령이 표시됩니다.이 명령의 의미는 무엇입니까
??? Array dimensions must match for binary array op.
이 모든 것이 Matlab의 설명서를 통해 확인할 수 있습니다.이 설명서는 항상 첫 단계입니다.
cell2mat
: 배열의 모든 요소에 대한 몇 가지 기능을 평가 : 당신은
arrayfun
을 정의하는 몇 가지 형식에 따라 매트릭스에 셀 어레이로 변환
@(b) sum(resulti == b,1)
)
sum
: 특정 방향으로 행렬의 모든 요소를 합산 할 수 있습니다. 방향 1 : 행을 아래로, 방향 2 : 열을 따라 등
nonzeros
: 입력 배열에서 모두 0을 제거하여 새 배열을 만듭니다. 이렇게하면 입력 모양과 관계없이 열 벡터가 출력됩니다.
unique
: 모든 값이 중복 된 입력 배열을 반환합니다. 출력도 정렬됩니다. 모든 명령에 대한 자세한 내용은
유형 help [command]
또는 doc [command]
당신의 명령에서 이러한 결합 이제
, (나는 당신이 추천!) :
A = nonzeros(unique(resulti))
열의 모든 고유 한 항목을 반환합니다 벡터, 모든 제로 제거.
B = arrayfun(@(b)sum(resulti==b), A, 'UniformOutput', false)
새로 생성 된 열 벡터 A
의 모든 항목에 @(b) sum(resulti == b,1)
기능을 실행하고 ('UniformOutput'
false
가 설정되어 있기 때문에, 셀)의 셀 어레이에 B
들을 수집. 이 함수는 단순히 resulti
의 각 요소를 실행 인덱스 b
과 비교하고 행을 따라 총 개수를 찾습니다. 그리고, 마지막으로,
capi = cell2mat(B)
는 정상 매트랩 배열에 다시 세포 배열 B
변환합니다.
이 명령의 목적은 resulti
의 각 열의 고유하지 않은 발생 수를 계산하는 것으로 보입니다. @GuntherStruyf에서 암시 한 바와 같이,이 모든 명령은 잘 관리되고 읽기 쉬운 코드가 아닌 해킹 된 함께 강제 된 한 줄짜리 코드처럼 보입니다. 나는 개인적으로 arrayfun
(느림)을 피하고 bsxfun
또는 for
-loop (더 빠르다 (예, for
-loop)을 더 잘 읽을 수 있음)을 사용하여 여러 줄로 나누기로했다.
하지만 그건 여론 :)에 반하는 의견의 문제 (의
http://www.mathworks.de/help/techdoc/ref/arrayfun.html – CloudyMarble
http://www.mathworks.de/help/techdoc/ref/cell2mat.html – CloudyMarble
'resulti'가 행 벡터 인 경우,'bsxfun (@ eq, resulti, nonzeros (unique (resulti)))와 동일합니다.''그래서'resulti'의 크기를 확인하고 그것이 무엇이라고 생각하는지 비교하십시오 (해당 코드를 참조하여) –