첫 번째 코드 줄은 "불연속 레이블"이있는 벡터를 만들고 두 번째 코드 줄은 레이블이 나타내는 인덱스에 1이있는 희소 행렬을 만듭니다. "눈"은 항등 매트릭스를 만들지 만 벡터 "a"가 훨씬 길더라도 스파 스 매트릭스를 만드는 효과는 여전히 유효합니다!이 Matlab/Octave 코드는 벡터로부터 부울 행렬을 어떻게 생성합니까?
무슨 일이 일어나는지 이해해 주시겠습니까?
octave:4> a = [1 3 5 7 9 2 4 6 8 10]
a =
1 3 5 7 9 2 4 6 8 10
octave:5> eye(10)(a,:)
ans =
Permutation Matrix
1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 1
이것이 옥타브를 좋아하는 이유 중 하나입니다. 임시 변수는 마음에 들지 않습니다. 어느 쪽이든, +1 : – rayryeng
@rayryeng 나는 옥타브를 사용한 적이 없지만 매우 강력한 표기법 인 것 같습니다. 또한, 나는 자동적 인 방송을 모은다 :'bsxfun'을위한 필요, 맞지?! –
정확히 :) ... 싱글 톤 차원 중 하나라도 1이면 옥타브는 암시 적으로 브로드 캐스팅을 처리 할 수 있습니다. 그러나 이것이 사실이 아니라면,'bsxfun'은 Octave에서 지원됩니다 : https://www.gnu.org/software/octave/doc/interpreter/Broadcasting.html – rayryeng