我试图找到矩阵中某些坐标的总和。
我有一个N x M
矩阵。我有一个包含2xM
值的向量。向量中的每对值都是矩阵中的坐标。因此它们的坐标数为M
。我想在不使用for循环的情况下找到所有坐标的总和。
我可以使用矩阵运算来获取它吗?
由于
答案 0 :(得分:2)
如果您想查找2xM
数组coords
的质心,那么您只需编写
centroid = mean(coords,2)
如果要查找加权质心,其中每个坐标对由MxN
数组A
中的相应条目加权,您可以使用sub2ind
,如下所示:
idx = sub2ind(size(A),coords(1,:)',coords(2,:)');
weights = A(idx);
weightedCentroid = sum( bsxfun( @times, coords', weights), 1 ) / sum(weights);
如果您想要的只是坐标指向的所有条目的总和,您可以执行上述操作并简单地将权重相加:
idx = sub2ind(size(A),coords(1,:)',coords(2,:)');
weights = A(idx);
sumOfValues = sum(weights);
答案 1 :(得分:2)
据我所知,矢量包含矩阵元素的(行,列)坐标。您可以将它们转换为矩阵元素数索引。此示例显示了如何执行此操作。我假设你的坐标向量看起来像这样: [n-coordinate1 m-coordinate1 n-coordinate2 m-coordinate2 ...]
n = 5; % number of rows
m = 5; % number of columns
matrix = round(10*rand(n,m)); % An n by m example matrix
% A vector with 2*m elements. Element 1 is the n coordinate,
% Element 2 the m coordinate, and so on. Indexes into the matrix:
vector = ceil(rand(1,2*m)*5);
% turn the (n,m) coordinates into the element number index:
matrixIndices = vector(1:2:end) + (vector(2:2:end)-1)*n);
sumOfMatrixElements = sum(matrix(matrixIndices)); % sums the values of the indexed matrix elements