2010-09-13 17 views

Répondre

0

Un pseudo-code. Pratiquement une boucle à travers chaque colonne pour chacune des rangées.

sum = 0 
for(i = 0; i < matrix.num_rows; i++) { 
    for(j = 0; j < matrix.num_cols; j++) { 
    if(matrix[i][j] % 2 == 0) 
     sum += matrix[i][j] 
    } 
} 

Vous ne savez pas exactement ce que vous entendez par forme de coordonnées.

+0

OP marqué Matlab comme langue. Les boucles doivent être évitées, car la vectorisation est généralement beaucoup plus rapide. La solution de Gnovice peut même être réduite à une ligne: 'sum (M (mod (M, 2) == 0))' – Doresoom

+0

Oh wow, merci. Je suppose que je ne savais pas que l'OP l'avait initialement marqué comme MATLAB. Mon erreur. –

1

C'est la matrice M avec seulement ses valeurs même:

(mod(M,2) == 0).*M

Vous pouvez résumer avec sum(M) ou sum(sum(M)) (pas sûr de ce « forme coordonnée » signifie).

+0

MATLAB n'a pas d'opérateur '%'. Vous voulez [MOD] (http://www.mathworks.com/help/techdoc/ref/mod.html). '%' est pour faire des commentaires. – gnovice

+0

@gnovice - merci, c'est ce que vous obtenez pour taper trop vite :) – adamk

+0

Pas de problème. C'est facile à oublier après avoir travaillé avec beaucoup d'autres langues qui ont '%' comme opérateur. – gnovice

4

Si vous avez une matrice M, vous pouvez trouver un logical index (à savoir masque) pour lequel les éléments sont même en utilisant la fonction MOD, qui peut fonctionner sur une matrice entière sans boucles besoin. Pour les entrées dans la matrice qui sont même le reste sera de 0 après la division par 2:

index = (mod(M,2) == 0); 

Vous pouvez obtenir les indices de ligne et colonne de ces même entrées en utilisant la fonction FIND:

[rowIndices,colIndices] = find(index); 

Et vous pouvez obtenir la somme des éléments même par l'indexation M avec le masque logique d'en haut pour extraire les entrées et même en utilisant la fonction SUM les additionner:

evenSum = sum(M(index)); 

Voici un exemple avec une matrice M créée à l'aide de la fonction MAGIC:

>> M = magic(3) 

M = 

    8  1  6 
    3  5  7 
    4  9  2 

>> index = (mod(M,2) == 0) 

index = 

    1  0  1  %# A matrix the same size as M with 
    0  0  0  %# 1 (i.e. "true") where entries of M are even 
    1  0  1  %# and 0 (i.e. "false") elsewhere 

>> evenSum = sum(M(index)) 

evenSum = 

    20