I ont une matrice de taille F
D-by-N
et un vecteur de longueur A
N
d'entiers aléatoires dans la plage [1,a]
. Je veux créer une matrice M
de taille D * a
telle que chaque colonne M(:,i)
a le vecteur F(:,i)
à partir de l'index (A(i)-1)*D+1
à (A(i)-1)*D+D
.Loopless affectation de sous-matrice dans Matlab
Exemple:
F = [1 2 3 10
4 5 6 22]
A = [3 2 1 2]
a = 4
M = [0 0 3 0
0 0 6 0
0 2 0 10
0 5 0 22
1 0 0 0
4 0 0 0
0 0 0 0
0 0 0 0]
je peux le faire avec une simple boucle
for i = 1 : N
M((A(i)-1)*D+1:(A(i)-1)*D+D,i) = F(:,i);
end
mais pour les grandes N
cela pourrait prendre un certain temps. Je cherche un moyen de le faire sans boucle.
Je dirais que cela est assez rapide. Avez-vous même chronométré pour de grandes valeurs de 'a/N' à vérifier pour voir si votre déclaration est correcte? – rayryeng
Eh bien, ce n'est pas vraiment lent, mais je voudrais quelque chose de plus rapide si possible, car cette partie de mon code est exécutée à chaque itération de mon algorithme principal. Sur mon ordinateur, il faut '3s' quand' a = 3', 'D = 6' et' N = 1e6'. – Simon
Comment 'a' peut-il être' 4' si 'A = [3 2 1 2]'? 'A' a des éléments de' 1' '' 3'. – Divakar