首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组的虚部或实部圆到不同的公差

将数组的虚部或实部圆到不同的公差
EN

Stack Overflow用户
提问于 2018-02-22 04:12:35
回答 1查看 193关注 0票数 0

我在Matlab中有一个复杂的数组

代码语言:javascript
复制
x = [2+1i, 0.1+3i, 0.001+4i, 5+0.0002i, 6+0.0013i]

我想让实部或虚部等于零,如果它们小于某种容限。

例如,如果实际容忍度为0.001,而虚容为0.001,那么在操作之后,我的数组应该如下所示:

代码语言:javascript
复制
x = [2+1i, 0.1+3i, 0+4i, 5+0i, 6+0.0013i]

当然,我可以把x分割成它的实部和虚部,独立地把它们围起来,然后再加入它们。但是,实际的数组相当大(100 k*100 k)--我不想浪费内存。

有没有一种方法可以绕过复杂数组的各个部分而不将其分割成两部分呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-22 10:49:13

首先,让我们来定义一下您的公差

代码语言:javascript
复制
tolReal = 0.01;
tolImag = 0.001;

您可以创建一个函数

代码语言:javascript
复制
f = @(z) real(z).*(real(z)>tolReal) + 1i.*imag(z).*(imag(z)>tolImag);

我们可以在示例数组上测试这一工作:

代码语言:javascript
复制
>> x=[2+1i 0.1+3i 0+4i 5+0i 6+0.0013i]
>> y = f(x)
y = 
   2 + 1i   0.1 + 3i   0 + 4i   5 + 0i   6 + 0.0013i  

使用这种函数形式的优点是我们可以使用arrayfun并避免创建100 k*100 k逻辑矩阵。

代码语言:javascript
复制
y = arrayfun( f, x );

这将产生同样的结果,但内存占用更少。这可能比大型矩阵的逻辑/矢量化方法更快(就像在您的例子中那样),因为我们正在避免创建大型矩阵。对于小矩阵,您可能会发现它比较慢,因为它基本上是一个伪装的循环。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48919553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档