如何查找t=-10:0.01:9.99的对应索引及y中匹配t的索引
嘿,看你的问题应该是在MATLAB里处理向量索引匹配的事儿吧?我一步步给你拆解清楚:
一、找向量t中值在[-10, 9.99]区间的索引
首先你定义的t = -10:0.01:9.99本身就刚好覆盖了[-10, 9.99]这个区间,步长0.01,所以它所有元素都落在这个范围里,对应的索引就是从1到t的总长度:
t_full_idx = 1:length(t);
要是t是某个更大向量的一部分(比如原t里有超出这个区间的元素),那用逻辑索引来精准筛选更稳妥:
% 生成逻辑向量,标记符合条件的元素 t_logical = t >= -10 & t <= 9.99; % 获取对应的索引 t_idx = find(t_logical); % 直接提取符合条件的元素也可以:t_selected = t(t_logical);
二、找y中与t对应的索引
因为t和y长度不一样,这里的“对应”分两种常见场景,你按需选就行:
场景1:y里有和t完全匹配的元素
如果y的元素是t的子集,或者存在完全相等的值,用ismember函数最省心:
- 要是你想得到每个t元素在y中的对应索引(没匹配上的会返回0):
[is_match, y_idx_for_t] = ismember(t, y); % is_match是逻辑向量,标记t里哪些元素在y中存在 % y_idx_for_t就是每个t元素对应的y索引,不存在则为0 - 要是你想得到y中所有和t元素匹配的元素的索引:
y_matching_idx = find(ismember(y, t));
场景2:y和t是同区间但不同步长的连续采样(近似匹配)
如果y和t是覆盖同一区间但步长不同的序列(比如y步长0.1,t步长0.01),需要找y里最接近每个t元素的位置,就用“找差值最小”的方法:
% 举个例子,假设y是这样的序列:y = -10:0.1:9.9; % 计算每个t元素和y所有元素的差的绝对值,取最小值对应的索引 [~, y_closest_idx] = min(abs(y - t'), [], 1);
这里把t转成列向量,和y做广播运算,min(..., [], 1)表示对每一列(也就是每个t元素)取最小值的索引,得到的y_closest_idx就是y里最接近每个t元素的位置。
内容的提问来源于stack exchange,提问作者wing155
相关产品推荐
相关产品推荐

