2017-05-08 1 views

Répondre

4

MATLAB a introduit une nouvelle fonctionnalité dans r2016b qui étend automatiquement les matrices aux dimensions requises tout en effectuant des opérations arithmétiques. Vous pouvez en savoir plus à ce sujet here. Par conséquent, votre code ne fonctionne pas dans r2016a. La façon de le faire dans r2016a est ce

C = bsxfun(@plus, A, B); 
+0

savez-vous si elle affecte t La vitesse de l'exécution en utilisant bsxfun au lieu du "nouveau" +? – GuillaumeC

+0

Je ne suis pas sûr, mais le nouveau '+' devrait être généralement plus rapide car il est plus intégré à la syntaxe matlab. Bien que je doute qu'il y aura une différence significative. Je n'ai pas la nouvelle version de MATLAB donc je ne peux pas le vérifier. Vous pouvez cependant en utilisant tic, et toc. – anyanwu

+3

@GuillaumeC La vitesse est similaire; voir [ici] (http://stackoverflow.com/q/42559922/2586922). Ou faites un test similaire pour votre cas spécifique (et dans ce cas utilisez 'timeit' pour un timing plus précis, plutôt que' tic', 'toc') –

0

Je n'ai pas R2017 et cette opération est logiquement mal je pense que vous vouliez faire

C=[A+B(1);A+B(2)] 

et il est nettement plus rapide que les fonctions

vous pouvez utiliser pour la boucle pour dimentions plus

for i=1:size(b,1)   
C=[A+B(i);A+B(i)]; 
end 
+0

Malheureusement, j'utilise des vecteurs de longueur x pour construire un tableau x * x dans un 4D (x, x, x, x) tableau. Le paramètre x peut être compris entre 5 et 100. Donc, je dois trouver une solution générique. – GuillaumeC

+0

juste utiliser pour la boucle, je modifier ma réponse – Reflection

+0

Que voulez-vous dire par "logiquement faux"? –