罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

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

协调零删除从多个数组

我最近回答一些问题关于如何协调多个数组同时改变。两个数组的一个例子是删除元素情况要么数组持有零的位置。这是一个很好的机会来重申逻辑数组的使用和一些有用的功能(如有关任何所有)。

内容

识别对去除

假设有两个数组

a = [1 4 9 0 25 49 0] b = [1 0 3 0 0 6 7 8]
49 25 = 1 4 9 0 0 0 b = 1 0 3 0 0 6 7 8

我想删除相应的元素一个b当他们中的任何一个包含一个零值。

第一个算法

有几个可能的算法,每种方法都有自己的利弊。这是第一个。

anyzero =任何([a, b] = = 0) (anyzero) = [] b (anyzero) = []
anyzero = 0 1 0 1 1 1 0 1 = 1 9 49 b = 1 3 7

该算法结合了两个数组,一个潜在的昂贵的移动,如果数组是大。然后检查值等于零。最后,检查columnwise,使用函数任何标识列,至少有一个零。最后,使用这个数组逻辑索引删除相应的元素一个b

第二个算法

这个算法(由米雷克·l·这篇文章不遭受结合两个数组。

x1 = (。* b ~ = 0)y1 = b(a.*b ~= 0)
x1 = 1 9 49日元= 1 3 7

但它计算相同的两次临时数组(这是一个向量的大小)。能够重新计算临时数组这样,我不能覆盖最初的数组作为你看到在第一个算法。最后,有一个对应于一个0,该算法不会找到它。

总是权衡

总有权衡以下我提到的这些,至少当我计划。如何选择权衡呢?你会选择哪一个呢?或者你会选择一个完全不同的算法(我希望你)。让我们知道在这里




使用MATLAB®7.9发表


评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。