【问题标题】:Is there a more efficient way of choosing an element from 1 array and to every element of the same array是否有一种更有效的方法可以从 1 个数组中选择一个元素并选择同一数组的每个元素
【发布时间】:2013-11-14 21:22:27
【问题描述】:

我想,对于数组 ZAbs 的每个元素,将其与数组本身的每个元素进行比较,然后将它们放入另一个不同的数组中。我希望不同数组的元素具有与 ZAbs 数组相同的索引。

我通过创建 4 个嵌套的 for 循环来做到这一点:

for pAbs2 = 1:400

    for qAbs2 = 1:300

        zAbsCompare = ZAbs(qAbs2, pAbs2);

        for pAbs3 = 1:400

            for qAbs3 = 1:300

                zAbsCompare2 = ZAbs(qAbs3, pAbs3);

                if (zAbsCompare == zAbsCompare2)

                    InitialZModEqualsImag(pAbs2,qAbs2) = InitialZImag(qAbs2, pAbs2);
                    InitialZModEqualsReal(pAbs2,qAbs2) = InitialZReal(qAbs2, pAbs2);

                end

            end

        end

    end

end

但是,这运行得很慢。我想不出更好的方法来做到这一点,但由于我对 MATLAB 缺乏经验,因此我可能在这里忽略了一些东西。有什么帮助吗?

编辑:修正了一个错误并重申了问题。

【问题讨论】:

  • 请正确缩进代码。在 Matlab 编辑器中选择代码并按 CTRL+I
  • 我不遵守作业。您将覆盖以前迭代中的值...
  • 你说得对,这写得不对。给我一点时间。

标签: arrays matlab loops for-loop


【解决方案1】:

您可以使用bsxfun 有效地进行比较(不确定这是您想要的):

comp = bsxfun(@eq, X, shiftdim(X,-2));

如果X(m,n) == X(p,q),则结果comp(m,n,p,q)1,否则为0

【讨论】:

  • 我认为这可能会有所帮助,但我为什么要移动数组 X 的维度?
  • @user2993946 您需要四个维度来包含结果:每个要比较的元素两个维度。如果您不移位,则与 bsxfun(@eq...) 的比较只会将元素 (1,1) 与 (1,1) 进行比较;元素 (1,2) 和 (1,2) 等(当然全都是)
  • @user2993946 如果比较不是您想要的,请进一步解释。可能我没有正确理解你的问题
  • 我想要一个数组,如果 X(i,j) == X(p,q) 然后将值分别分配给 Y(i,j) 和 Y(p,q)。我遇到的问题是,要做到这一点,我必须创建 4 个 for 循环来分别选择 i、j、p 和 q 的每个组合。
  • 我没有给出这个答案,因为它虽然紧凑且快速,但内存效率不高,需要 14.4 GB 的 300x400 矩阵。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多