search for the position of a number inside a cell (cell with existence of empty rows)
1 回表示 (過去 30 日間)
古いコメントを表示
I am trying to look for each row of 'N' inside a cell.
I am using 'find' but it doesn't seem to work.
I should identify, in the cell, the rows of N. In this case, row 3 and row 19.
parameters = importdata("parameters.mat");
N = [parameters{3,1}; parameters{19,1}];
tt = 1;
for t = 1:height(parameters)
[r,c] = find(parameters{t,1}(1,1) == N(tt,1) & ...
parameters{t,1}(1,2) == N(tt,2) & ...
parameters{t,1}(1,3) == N(tt,3) & ...
parameters{t,1}(1,4) == N(tt,4));
end
0 件のコメント
採用された回答
Star Strider
2024 年 2 月 10 日
Use ismember (since you have the exact values, otherwise ismembertol) and any (here using the default column orientation, dimension = 1) to be inclusive, with cellfun (that loops internally) —
load('parameters')
% whos
parameters
N = [parameters{3,1}; parameters{19,1}]; % 'Target' Values
idx = cell2mat(cellfun(@(x)any(ismember(x,N)), parameters, 'Unif',0)); % Logical Index Vector
Result_Index = find(idx) % Numeric Index
Result = parameters(idx) % Result Values
There are likely other ways to do this as well.
.
0 件のコメント
その他の回答 (1 件)
VBBV
2024 年 2 月 10 日
編集済み: VBBV
2024 年 2 月 10 日
Use a | instead of &. OR in place of AND
2 件のコメント
VBBV
2024 年 2 月 10 日
Using for loop it can be like this
p = load("parameters.mat");
N = [p.parameters{3,1}; p.parameters{19,1}]
tt = 1;
for t = 1:height(p.parameters)-1
K = p.parameters{t+1,1};
if ~isempty(K)
if tt == 1 % N(1,:) inside parameter
[r,c] = find((K(1) - N(tt,1)) < 1e-3 & ...
(K(2) - N(tt,2)) < 1e-3 & ...
(K(3) - N(tt,3)) < 1e-3 & ...
(K(4) - N(tt,4)) < 1e-3)
else % N(2,:) inside parameter
tt = tt + 1;
[r,c] = find((K(1) - N(tt,1)) < 1e-3 & ...
(K(2) - N(tt,2)) < 1e-3 & ...
(K(3) - N(tt,3)) < 1e-3 & ...
(K(4) - N(tt,4)) < 1e-3)
end
end
end
You can try using ismember function to vaoid for loop
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!