Anda mungkin menginginkan fungsi Matlab bsxfun yang lebih tidak jelas . Dari dokumentasi Matlab, bsxfun "menerapkan operasi biner elemen demi elemen yang ditentukan oleh fungsi handle fun ke array A dan B, dengan ekspansi tunggal diaktifkan."
@gnovice yang disebutkan di atas bahwa jumlah dan fungsi dasar lainnya sudah beroperasi pada dimensi non-tunggal pertama (yaitu, baris jika ada lebih dari satu baris, kolom jika hanya ada satu baris, atau dimensi yang lebih tinggi jika semua dimensi yang lebih rendah memiliki ukuran == 1 ). Namun, bsxfun berfungsi untuk fungsi apa pun, termasuk (dan terutama) fungsi yang ditentukan pengguna.
Misalnya, Anda memiliki matriks A dan vektor baris BEg, katakanlah:
A = [1 2 3;
4 5 6;
7 8 9]
B = [0 1 2]
Anda menginginkan fungsi power_by_col yang mengembalikan dalam vektor C semua elemen di A pangkat dari kolom B.
Dari contoh di atas, C adalah matriks 3x3:
C = [1^0 2^1 3^2;
4^0 5^1 6^2;
7^0 8^1 9^2]
yaitu,
C = [1 2 9;
1 5 36;
1 8 81]
Anda bisa melakukan ini dengan cara brute force menggunakan repmat:
C = A.^repmat(B, size(A, 1), 1)
Atau Anda dapat melakukan ini dengan cara berkelas menggunakan bsxfun, yang secara internal menangani langkah repmat:
C = bsxfun(@(x,y) x.^y, A, B)
Jadi bsxfun menghemat beberapa langkah (Anda tidak perlu menghitung dimensi A secara eksplisit). Namun, dalam beberapa tes informal saya, ternyata repmat kira-kira dua kali lebih cepat jika fungsi yang akan diterapkan (seperti fungsi power saya, di atas) sederhana. Jadi, Anda harus memilih apakah Anda menginginkan kesederhanaan atau kecepatan.