Octave'da anonim bir işlev kullanarak bir vektördeki öğeleri nasıl değiştirebilirim?


15

Bir vektör / matristeki iki öğenin değiştirilmesi Octave'de çok basittir:

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

Ne yazık ki, bunu anonim bir işlev içinde yapmanın bir yolunu bulmadım. Aşağıdaki işlev sözdizimsel olarak doğru olsa da, tüm xvektörü değil, yalnızca değiştirilen iki öğeyi geri verir :

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

Anonim işlevleri golf olarak kullanarak istenen davranışı elde etmenin bir yolu var mı? Anonim bir işlev kullanılarak birkaç öğe bu şekilde değiştirilebilir mi?

Ben olabilir bir indeksleme vektör oluşturun: f=@(x)x([4,2,3,1,5])ama oluştururken böyle bir vektör dinamik olasılıkla çok bayt bir çok alacaktır.


Yanıtlar:


21

Bağımsız Değişken Listesi

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

Çevrimiçi deneyin!


5
Ne bekle ? Bunun Octave'de mümkün olduğunu hiç bilmiyordum. Bu pek çok yeni teknik açıyor ....
Sanchises

4
Ne var ...?
Stewie Griffin

1
Lütfen bunu Octave için İpuçları sorusuna gönderin! Bu teknikle, temel olarak argüman listesindeki her şeyi yapabilirsiniz, böylece bir daha 'tam' ve anonim işlev arasında bir daha seçim yapmanız gerekmez. Şok oldum.
Sanchises

3
İnanılmaz. BTW, ;bayt sayımı amacıyla finali kaldırabilirsiniz
Luis Mendo

Herkese teşekkürler. @ Sanchises Octave, şok edici bir dil gibi görünüyor. Dikkatli ol! İpuçları eklenir.
rahnema1

11

olmak eval

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

Çevrimiçi deneyin!


Matlab'da parantezler atlanamaz:

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

9
Cevap sadece PPCG'de eval:-)
Stewie Griffin

Eklemek istediğiniz musunuz bu Octave ipuçları soruya? forkullanarak anonim bir fonksiyon içinde döngü evalçok bayt kaydetti ve muhtemelen de diğer birçok zorluklarda yapabilirsiniz ,,,
Stewie Griffin

Şimdiye kadar golfçü olup olmadığından emin değilim, ama anonim işlev olmadan bile yapabileceğinizi varsayalım: s='x([1 4])=x([4 1])';eval(s)- Zaten minimal karakterlerle eval yapmak için bir işlev yaptıysanız, bu çoğunlukla ilginç olduğunu düşünüyorum.
Dennis Jaheruddin


2
Bu cevabın bugüne kadar geçerli Octave ve Matlab olan tek cevap olduğunu düşünüyorum.
Batman

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.