【问题标题】:Can anyone explain to me what is going on in this line of MatLAB code谁能向我解释这行 MatLAB 代码中发生了什么
【发布时间】:2015-10-12 09:08:12
【问题描述】:
y = rand(20,3); 
aa= unidrnd(2,20,3) - 1;
val = ( aa & y<1.366e-04) | (~aa & y<8.298e-04);
aa(val) = ~aa(val);

我有这个代码。 任何人都可以向我解释这里发生了什么。我试图一步一步地理解它(调试),但我无法理解在第 4 行中使用反向 '~' 以及使用 'val' 作为索引的目的。

【问题讨论】:

  • 自您提出此问题以来,我假设您并没有自己编写此代码,因此我建议您请实际编写此代码的人向您解释他们的代码。

标签: matlab logical-operators inverse


【解决方案1】:
y = rand(20,3); 

创建一个均匀分布的随机数矩阵y。

aa= unidrnd(2,20,3) - 1;

创建一个从 1 到 2 的均匀分布的随机整数矩阵,然后减去一个。因此,aa 是一个 0 和 1 的矩阵。

val = ( aa & y<1.366e-04) | (~aa & y<8.298e-04);

这一行检查所有 aa 为 1AND y&lt;1.366e-04 或 aa 为 0 且 y&lt;8.298e-04 的值。请注意,这几乎不会发生,因为 y 是从 0 到 1 均匀分布的数字,因此它们不太可能如此小。

aa(val) = ~aa(val);

采用之前计算的所有这些情况,如果在该索引中发生,则将 aa 从 0 更改为 1 或从 1 更改为 0。

【讨论】:

  • 这意味着,'aa' 将保持为 'aa',因为 y&lt;1.366e-04 和 y&lt;8.298e-04 永远不会满足。
  • @nashynash 是的,但小心,他们可以满足。其中一个满足p=8.298e-04的概率。
  • 好的。我对 MatLAB 如何获取aa(val) = ~aa(val); 的值还有一个疑问。我尝试查找有关这种分配方法的文档,但找不到。
  • @nashynash ?那是标准的 Matlab 索引……阅读:stackoverflow.com/questions/32379805/…
  • 好的,我会读的。我忘了提到 'val' 元素总是 '0' 因为条件永远不会满足。这对第 4 行中的分配意味着什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2015-07-08
  • 2021-04-10
  • 2018-11-30
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多