A function called small_elements that takes as input an array named X that is a matrix or a vector. Could you help me to understand the meaning?

1 次查看(过去 30 天)
Write a function called small_elements that takes as input an array named X that is a matrix or a vector. The function identifies those elements of X that are smaller than the product of their two indexes. For example, if the element X(2,3) is 5, then that element would be identified because 5 is smaller than 2 * 3. The output of the function gives the indexes of such elements found in column-major order. It is a matrix with exactly two columns. The first column contains the row indexes, while the second column contains the corresponding column indexes. For example, the statement indexes = small_elements([1 1; 0 4; 6 5], will make indexes equal to [2 1; 1 2; 3 2]. If no such element exists, the function returns an empty array.
I'm not native english speaker so I can't understand very well. My question is..why the function returns a "3"?
Thank you for your help!

回答(2 个)

Walter Roberson
Walter Roberson 2017-8-28
For a 3 x 2 input named x, the logic is like
if x(1,1) < 1*1
disp([1, 1])
end
if x(1,2) < 1*2
disp([1, 2])
end
if x(2,1) < 2*1
disp([2, 1])
end
if x(2,2) < 2*2
disp([2, 2])
end
if x(3, 1) < 3*1
disp([3, 1])
end
if x(3, 2) < 3*2
disp([3, 2])
end

RAMAKANT SHAKYA
RAMAKANT SHAKYA 2019-2-7
function ind=small_elements(v)
[m,n]=size(v);
j=0;
ind=[];
for c=1:n
for r=1:m
if (r*c) > v(r,c)
j=j+1;
s=[r c];
ind=vertcat(ind,s); %adding matrix vertically
end
end
end
end
  1 个评论
Stephen23
Stephen23 2019-2-7
编辑:Stephen23 2019-2-7
Vectorized code is much simpler and most likely more efficient:
>> X = [1,1;0,4;6,5]
X =
1 1
0 4
6 5
>> S = size(X);
>> [R,C] = find(X<((1:S(1)).' .* (1:S(2))));
>> Z = [R,C]
Z =
2 1
1 2
3 2

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by