我正在编写一个名为large_elements
的函数,它接受一个名为X
的数组,它是一个矩阵或向量。该函数标识X
的那些大于其两个索引之和的元素。
例如,如果元素X(2,3)
为6
,则会识别该元素,因为6 > (2 + 3)
。函数的输出给出了行主要顺序中找到的此类元素的索引(行和列子)。它是一个只有两列的矩阵。第一列包含行索引,第二列包含相应的列索引。
这是一个例子,声明
indexes = large_elements([1 4; 5 2; 6 0])
应该给出如下输出:
[1 2; 2 1; 3 1]
如果不存在此类元素,
该函数返回一个
empty array
。
我想出了以下代码
function indexes = large_elements(A)
[r c] = size(A);
ind = 1;
for ii = 1:r
for jj = 1:c
if A(ii,jj) > ii + jj
indexes(ind,:) = [ii jj];
ind = ind + 1;
else
indexes = [];
end
end
end
end
但结果不如预期。任何帮助将不胜感激。
答案 0 :(得分:0)
A = randi(8,5); %// Your matrix
%// finding sum of the indexes for all elements
indSum = bsxfun(@plus, (1:size(A,1)).', 1:size(A,2));
%// generating a mask of which elements satisfies the given condition (i.e A > indSum)
%// Transposing the mask and finding corresponding indexes
[c,r] = find(bsxfun(@gt, A, indSum).') ;
%// getting the matrix by appending row subs and col subs
out = [r,c]
<强>结果:强>
输入A:
>> A
A =
4 4 7 2 2
1 3 4 8 3
8 8 2 8 7
8 3 4 5 1
4 1 1 1 1
以行主顺序输出:
out =
1 1
1 2
1 3
2 4
3 1
3 2
3 4
4 1
注意:在行主要顺序中获取子目录非常棘手
这也是你正确的循环方法
[r, c] = size(A);
ind = 0;
indexes = [];
for ii = 1:r
for jj = 1:c
if A(ii,jj) > ii + jj
ind = ind + 1;
indexes(ind,:) = [ii jj];
end
end
end
答案 1 :(得分:0)
这是因为无论何时遇到小于其索引总和的元素,您都要将数组重新初始化为null
。因此输出结果为null
。您不应在null
条件下将其初始化为else
。