【问题标题】:How to scan the whole matrix point by point如何逐点扫描整个矩阵
【发布时间】:2011-07-17 16:32:38
【问题描述】:

假设我有一些转换操作,其中某些数量的矩阵 (M) 被相互替换(所有的都变成 5,所有的 2 变成 6,等等)。现在我知道我可以写这样的代码了:

if M(1,1)== 1 M(1,1)=5 end
if M (1,1)== 2 M(1,1)=6 end
if M(1,2)==1 M(1,2)=6 end

当然,如果我有(10×10×10)矩阵,这是很多不必要的工作。是否有可能定义 3 个维度(列、行、页)或告诉 matlab 类似:

% scan from point (1,1,1) to point (10,10,10) and apply mathematical operations when condition is fulfilled.

谢谢

【问题讨论】:

标签: matlab


【解决方案1】:

有一个简单的命令可以使用逻辑索引将数组中的所有as 更改为bs。例如,

B = (M == 1);
M(B) = 5;

应将M 中的所有1s 更改为5s。

【讨论】:

  • 是的,也谢谢你——但我使用的操作并不像示例中的这些操作那么简单,因此我有必要能够定义 (x,y,z)所以我可以这样说:如果 M(x,y,z)
  • @kojikurac:在这种情况下要小心边缘!例如,当您的条件是“如果 M(i,j,k) J K 矩阵)。通常,您将从该解决方案中获得比其他解决方案更好的性能(如果您的操作速度很快,如果单个操作需要大量时间,则此解决方案可能会更慢)。还;熟悉 MATLAB 的人将能够更快地理解您的代码(MATLAB 人通常不喜欢 for 循环)。
  • @kojikurac @egon:在 MATLAB 中避免 for 循环的主要原因是它们非常慢。另一方面,矩阵运算得到了很好的优化。即使您的测试条件与您的描述相似,也可能有办法将其转换为矩阵运算,您将获得更好的性能。
  • 谢谢!你们在这里都是真正的天才!慢慢地,我的算法组合达到了我想要的地方,当然,我尝试用每个新想法优化我的代码,所以我确信在某一时刻我必须照顾好性能。到目前为止,我的代码并没有那么复杂,我可以允许自己使用 for 循环或 2 :)
【解决方案2】:

我对 MATLAB 不太熟悉,但您似乎应该能够定义 3 个标量变量 i、j 和 k,并使用 3 个嵌套的 for 循环来迭代每个有序的三元组(x、y、z ) 其中 0

【讨论】:

  • 是的,这正是我要找的,但我不知道如何定义 3 嵌套循环:(
  • 谢谢!一个人有时会如此纠结于自己的思维方式,以至于最简单的想法都不会出现在您的脑海中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2019-08-08
  • 2019-08-19
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多