提问人:Benvz 提问时间:10/27/2023 更新时间:10/27/2023 访问量:44
MATLAB - 如何使用上一次操作的索引查找另一列的值?
MATLAB - How do I find another column's values with the indices from a previous operation?
问:
我目前正在尝试从 273614x25 矩阵中制作一个具有吸收线位置和前 N 个最强线强度的小矩阵。但是,我只需要 Wavenumber 的 2045-2155 范围内的相应值,该值是矩阵中的列。
到目前为止,降低指数和范围的工作非常顺利。但是我尝试制作一个小的 for 循环,它从第 1 列开始获取这些索引和范围,并尝试分配前 N 个最高值的索引。
我只需要一个 Nx2 矩阵,其中第 1 列具有波数,第二列具有前 N 线强度及其相应的波数。
到目前为止,我有这个:
A = readmatrix("linelist_H216O.txt");
RangeMin = 2045;
RangeMax = 2155;
MinInd = find(A(:,1)>RangeMin,1);
MaxInd = find(A(:,1)>=RangeMax,1);
B = A(RangeMin:RangeMax,5);
L = maxk(B, 20, 1);
IND = zeros(length(L),1);
for i = 1:length(L)
IND(i) = find(A(MinInd:MaxInd,5)==L(i,:),1);
end
TopLines = [IND+MinInd, L];
但问题出在第 11 行,它说双方都有不同数量的元素。 有谁知道如何解决这个问题?
答:
0赞
Benvz
10/27/2023
#1
我设法做到了:
A = readmatrix("linelist_H216O.txt"); %Loads H20 Linelist
RangeMin = 2045; %Minimum Wavenumber
RangeMax = 2155; %Maximum Wavenumber
MinInd = find(A(:,1)>RangeMin,1); %Index of Min WN
MaxInd = find(A(:,1)>=RangeMax,1); %Index of Max WN
B = A(MinInd:MaxInd, [1, 5]); %Column 1 and 5 of A (WN and Linestrengths (S)) within range
C = [1:25]'; %Numbers
[L,I] = maxk(B(:,2), 25, 1); %Get indices of 25 highest S
E = [C, B(I,:)]; %WN and respective S in order
上一个:如何计算作为对象一部分的多个数组中字符串的出现次数?
下一个:排列元素以最小化总和
评论
MaxInd = find(A(:,1)>=RangeMax,1);
<=
RangeMax
idx = (A(:,1)>RangeMin) & (A(:,1)<=RangeMax); B = A(idx,:);
A = readmatrix("linelist_H216O.txt"); %Loads H20 Linelist RangeMin = 2045; %Minimum Wavenumber RangeMax = 2155; %Maximum Wavenumber MinInd = find(A(:,1)>RangeMin,1); %Index of Min WN MaxInd = find(A(:,1)>=RangeMax,1); %Index of Max WN B = A(MinInd:MaxInd, [1, 5]); %Column 1 and 5 of A (WN and Linestrengths (S)) within range C = [1:25]'; %Numbers [L,I] = maxk(B(:,2), 25, 1); %Get indices of 20 highest S E = [C, B(I,:)]; %WN and respective S in order