Octave에서 익명 함수를 사용하여 벡터의 요소를 바꾸는 방법은 무엇입니까?


15

벡터 / 매트릭스에서 두 요소를 바꾸는 것은 옥타브에서 매우 간단합니다.

x='abcde';
x([4,1])=x([1,4])
x = 
   dbcae

불행히도 아직 익명 함수 내 에서이 작업을 수행 할 수있는 방법을 찾지 못했습니다. 아래 함수는 구문 상 정확하지만 전체 x벡터가 아닌 교체 된 두 요소 만 반환합니다 .

f=@(x)(x([4,1])=x([1,4]))
f(x)
ans = 
     ad

익명으로 기능을 사용하여 원하는 방식으로 골치 아픈 방법을 얻을 수 있습니까? 익명 함수를 사용하여이 방법으로 여러 요소를 교체 할 수 있습니까?

내가 할 수 색인 벡터를 만들 : f=@(x)x([4,2,3,1,5])하지만, 만드는 이러한 벡터는 동적 가능성이 너무 바이트 많이 걸릴 것입니다.


답변:


21

인수리스트

f=@(x,y=x([4 1])=x([1 4]))x;

온라인으로 사용해보십시오!


5
잠깐, 무엇을 ? 나는 이것이 옥타브에서 가능하다는 것을 결코 알지 못했습니다. 이것은 많은 새로운 기술을 열어줍니다 ....
Sanchises

4
무엇에서 ...?
Stewie Griffin

1
옥타브 팁 질문에 이것을 게시하십시오! 이 기술을 사용하면 기본적으로 인수 목록의 모든 것을 수행 할 수 있으므로 '전체'함수와 익명 함수를 다시 선택할 필요가 없습니다. 나는 충격을 받았다.
Sanchises

3
놀랄 만한. BTW, 당신 ;은 바이트 수의 목적을 위해 결승 을 제거 할 수 있습니다
Luis Mendo

모든. @ Sanchises 덕분에 Octave는 충격적인 언어 인 것 같습니다. 조심해! 팁에 추가됩니다.
rahnema1

11

있다 eval

f=@(x)eval"x([4 1])=x([1 4])"

온라인으로 사용해보십시오!


Matlab에서는 괄호를 생략 할 수 없습니다 :

f=@(x)eval('x([4 1])=x([1 4])')

9
PPCG에만 eval답이 있습니다 :-)
Stewie Griffin

옥타브 팁 질문에 이것을 추가 하시겠습니까? 거기에 많은 바이트 foreval저장 하여 익명 함수 내부에서 루프 하고 아마도 다른 많은 도전에서도 그것을 할 수 있습니다.
Stewie Griffin

그것이 골퍼인지 확실하지는 않지만 익명의 기능 없이도 할 수 있다고 생각합니다 s='x([1 4])=x([4 1])';eval(s).- 최소한의 문자로 평가하는 기능을 이미 만들었다면 이것이 흥미로울 것입니다.
데니스 Jaheruddin


2
나는이 답변이 유효한 옥타브와 Matlab 모두 유일하다고 생각합니다.
배트맨

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.