如何获取反余弦生成的复数数组中实部最小且大于0的元素索引
实现方案(Matlab环境)
你的猜测是对的:real(x)>0返回的是布尔数组,对布尔值取min只会得到第一个逻辑假(即实部<=0)的位置,完全不符合需求。
无需if语句的实现有两种常用写法:
写法1:逻辑索引替换(可读性更高)
% 提取所有元素的实部 real_arr = real(x); % 将实部小于等于0的位置赋值为无穷大,避免被最小值计算选中 real_arr(real_arr <= 0) = Inf; % 取最小值对应的索引,~表示忽略返回的最小值本身 [~, idx_min_x] = min(real_arr);
针对你的示例数组,运行后idx_min_x结果为3,对应0.2 + 0.0i的位置,符合预期。
写法2:一行式实现
[~, idx_min_x] = min(real(x) + (real(x) <= 0)*Inf);
原理是给所有实部<=0的元素叠加一个无穷大值,让这些位置在最小值计算时自动被排除,逻辑和写法1完全一致。
内容的提问来源于stack exchange,提问作者Peter Panduro Jørgensen
相关产品推荐
相关产品推荐

