我想只从包含虚数的数组中提取实数,我也想从数组中消除虚数。因此,从一个10个元素的数组,其中5个实数和5个虚数,得到一个只有5个元素的数组,它必须是实数元素。这在 MATLAB
编辑:
添加示例
input_array = [ 1, 1+i, -2+2*j, 3, -4, j ];
所需的输出将是
output = [ 1, 3, -4 ];
其中仅包含 的真实元素input_array
。
我想只从包含虚数的数组中提取实数,我也想从数组中消除虚数。因此,从一个10个元素的数组,其中5个实数和5个虚数,得到一个只有5个元素的数组,它必须是实数元素。这在 MATLAB
编辑:
添加示例
input_array = [ 1, 1+i, -2+2*j, 3, -4, j ];
所需的输出将是
output = [ 1, 3, -4 ];
其中仅包含 的真实元素input_array
。
另一种更矢量化的方式:
sel = a == real(a); % choose only real elements
only_reals = a( sel );
实数的虚部为零,所以:
input_array(imag(input_array)==0);
ans =
1 3 -4
你可以用isreal
函数来做到这一点。结果isreal
没有给出向量输出,这对 MATLAB 来说很奇怪,因为它通常会给出。因此,您需要使用 for 循环。
arr = [1+i 5 6-3i 8];
arrReal = [];
for idx = 1:numel(arr)
if isreal(arr(idx))
arrReal(end+1) = arr(idx);
end
end
我想这里的好人会想出一个无循环的解决方案。
夏编辑:
预分配输出结果的版本
arrReal = NaN( size(arr) ); % pre-allocation
for idx = 1:numel(arr)
if isreal( arr(idx) )
arrReal(idx) = arr(idx);
end
end
arrReal( isnan( arrReal ) ) = []; % discard non-relevant entries
当然,这个目标可以在没有循环的情况下实现(参见其他答案)。但是对于这个循环版本,预分配是一个重要的组成部分。