0
votes

Comment trouver une somme 3 éléments dans la matrice?

J'ai un tableau a = [A1, A2, A3, ..., an] code> Je voudrais emprunter un produit de chaque 3 éléments:

S1 = A1 + A2 + A3 CODE> P>

S2 = A4 + A5 + A6 CODE> P>

... P> P> P> P> P>

sm = a (n-2) + a (n-1) + un code> p>

ma solution: strong> p>

k=size(A);
s=0;
for n=1:k
s(n)=s(n-2)+s(n-1)+s(n);
end


0 commentaires

3 Réponses :


1
votes

Vous essayez de calculer s à l'aide de valeurs à partir de S . Vous ne voulez pas dire s (n) = A (n-2) + a (n-1) + a (n); ? Également Taille retourne plus d'une dimension par elle-même.

qui étant dit, obtenez les 2 valeurs priveuses n-2 et n-1 Du point de vue de N = 1; 2 (parce que vous devez avoir des indices positifs). Vous devez expliquer comment les deux premières valeurs doivent être utilisées. Je suppose que 0 pour des éléments n'existant pas encore xxx

ou s shoult soit 2 valeurs plus courte que A . xxx


2 commentaires

s (1) est une somme d'A1, A2 et A3


Le tableau donné a n éléments. Je voudrais calculer une somme d'une ligne



1
votes
  • Vous initialisez s code> comme scalaire avec s = 0 code>. Ensuite, vous essayez de l'indexer comme un tableau, mais il n'a qu'un seul élément. Li>
  • Votre logique actuelle (si fixe) calculera ceci: p>

    s = sum( reshape( a, 3, [] ) );
    

4 commentaires

Pour la dernière partie, il n'est pas réellement nécessaire que a soit un vecteur de ligne, est-ce?


@LUISMENDO J'aurais probablement pu vaincre "Vector" :)


@LUISMENDO Je travaille avec A sous forme de tableau N-DIMENSIONAL, A (1) ... est une matrice m-dimensionnelle, m .


@NOEL qui n'est pas mentionné du tout dans votre question et affecte fondamentalement la manière dont les réponses données aura bien fonctionnent ... veuillez toujours inclure un représentant exemple reproductible minimal pour ce que vous voulez réaliser



2
votes

Si vous voulez résumer dans blocs forts>, pour le cas général lorsque le nombre d'éléments de a code> est pas nécessairement un multiple fort> de la Taille du bloc, vous pouvez utiliser accumarray code> :

A = [3 8 5 8 2 3 4 7 9 6 4]; % 11 elements
s = 3; % block size
result = conv(A(:).', ones(1,s), 'valid');


1 commentaires

Depuis MATLAB R2016A, vous pouvez utiliser la fonction MOVSUM pour calculer une somme coulissante, qui est un peu plus intuitive que la méthode de convolution.