罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

聪明,是逻辑!

最近一个客户问我一个有趣的问题的一个好方法来计算。我坐下来解决之前,我提到这个问题,我的朋友,肖恩。然后他很快回答说,“马克思的逻辑”。我花了只是一个时刻意识到他在说什么,这个问题的答案。但是当我听到它,我听到一个人的名字“马克斯逻辑”,虽然我不知道那是谁,我立刻想到麦克斯韦聪明,从60年代电视喜剧在美国,被称为“智能”。 由艺术家Corporation-GAC-management。公共领域,通过维基共享,你可以看到今天的手机的前兆!

内容

这个问题

所以有什么问题?客户提出了它的一个例子。给定一个三维数组,为这个例子从一个生成矩阵,找到的第一架飞机一些条件为真。
= (1 - 2;3 4]M =猫(3个+ 1、+ 2、+ 3);
一个= 1 2 3 4
所以这个函数应该是这样的:IDX = someFunction (M > = 5);
IDX =[南4;3 2]
IDX =南4 3 2
,客户想要这个工作高维数组。

解决方案

就像我说的,我提到过肖恩。但我以为约2秒前和我意识到我可以做一个找到整个数组,就好像它是一个矢量,得到的位置,把他们放进适当的位置,找到第一个正确的维度。然后肖恩说“马克斯逻辑”。这是一个伟大的解决方案是什么样子。
catdim = 3;szA =大小(A);[mv, midx] = max (M > = 5, [], catdim);IDX =南(szA);IDX (mv) = midx (mv)
IDX =南4 3 2
为什么/这是怎么工作?嗯,我使用条件满足,我希望到函数马克斯,这是合乎逻辑的输入,这意味着只有0和1。和马克斯返回索引是满足第一个条件,和我这样做最终的尺寸。然后创建一个数组值,使用逻辑索引更新这个指数矩阵。瞧!

更高的维度

现在让我们看看在更高的维度是很有意义的。为简单起见,我又将提供一个基础数组1尺寸小于我最终看,所以我可以建造一些我可以相当容易地检查结果。
=兰迪(17日[3 2 1 3]);catdim = ndims (A) + 1 M =猫(catdim, + 1、+ 2、+ 3、+ 4);
catdim = 5
看到一片
sliceOfM = M (:,:,: 1)
sliceOfM = 12 2 13 4 8 16
应用马克斯逻辑索引,下一个。
szA =大小(A) (mv, midx) = max (M > = 13, [], catdim);IDX =南(szA);IDX (mv) = midx (mv)
szA = 3 2 1 3 IDX(:,:, 1, 1) = 2南南南1 IDX(:,:, 1, 2) =南1 1南4南IDX(:,:, 1, 3) =南1 1 1南1

你接受了逻辑索引吗?

我已经做了多年来在几个帖子索引读者发现有帮助。你有什么有趣的逻辑故事分享?将它们贴在这里

发表与MATLAB®R2017b

  • 打印
  • 发送电子邮件

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그인하거나계정을새로만드십시오。