【问题标题】:How would I go about this task- Matlab [duplicate]我将如何完成这项任务-Matlab [重复]
【发布时间】:2012-09-05 01:25:49
【问题描述】:

可能重复:
How to store value generated from nested for loop in an array, in Matlab?

我有一个数字数组。例如x = [4,9,8]。我用find(x)得到[1,2,3],然后find(x)+length(x)得到[4,5,6]。

我希望这个(在这种情况下,将 3 添加到数组中,以使序列 1,2,3 4,5,6 7,8,9...)继续 n 次,所以我需要一个循环。

现在有了数组 x,我想将 [4,9,8] 添加到 [1,2,3] 中,得到 [5,11,11]。

我有 [1,2,3]...[10,11,12]...[n,n+1,n+2] 来自 find(x)+length(x) 循环,我想要将 x 中的元素添加到相应位置的元素中,在三个向上的数组中。

例如,[4,5,6] 5 位于位置 2。x=[4,9,8]。 9 在 x 内的位置 2。因此,我想将 9 添加到 5。我想为每个元素(在本例中为三个元素中的每一个)执行此操作。我会将 9 加到 11 和 9 到 11,因为这两个数字在各自数组中的位置为“2”。

我正在考虑使用嵌套的 for 循环来处理 find(x)+length(x)。我只是不确定如何进行“位置添加”。

然后我想将加法的结果存储在一个单独的数组中。

提前感谢您的时间和帮助!

【问题讨论】:

  • 我尝试使用嵌套的 for 循环,我可以得到很好的序列,只是不是正确的添加 - 即基于位置的那些。到目前为止,我只能得到例如[4,9,8] 加到 [1,2,3] 得到 [5,11,11] 然后 [4,9,8] 加到 [4,5,6] 得到 [8,14,14 ]。这不是我真正想要的。
  • 你开始的输入是x = [4, 9, 8]。我无法看到您所追求的输出...例如,您为什么不想要 [4,9,8] + [4,5,6] = [8,14,14]?这对我来说似乎完全合理。
  • 对于该步骤,我想要的输出是 [14,20,20]。这将通过将 9 添加到数组 [5,11,11] 来获得。 9 对应于 x 中的第二个位置。在我的系列数组中(那些是 [1,2,3] [4,5,6] [7,8,9] [10,11,12] ....)我想将 x 中的元素添加到系列数组中的元素基于它们的位置。因此,由于 5 和 11 在其数组的第二个位置,我想将 9 添加到它们,因为 9 在 x 内的第二个位置。
  • 您已经发布了similar question

标签: arrays matlab for-loop nested element


【解决方案1】:

所以,我们从

x = [4,9,8]

让我们添加[1, 2, 3]

x + [1, 2, 3]
ans =
     5    11    11

更灵活的方式

x + (1 : length(x))
ans =
     5    11    11

如果您不想从 1 开始,而是从 b 开始(例如,我们将 [5, 6, 7] 添加到 x):

b = 5;
x + b + (0 : length(x) - 1)
ans =
     9    15    15

我认为这应该可以让您继续前进,您现在可以添加循环。

警告:您使用find() 的方式非常奇怪。只是为了确保:find(x) 返回x 中非零条目的索引。如果向量x 的所有元素都不为零,则您有相等性

find(x) == 1 : length(x)

如果x 中的任何元素为零,则在将其添加到find(x) 时会遇到问题:

x = [4, 9, 0, 8];
find(x)
ans =
     1     2     4

x + find(x)
Error using  + 
Matrix dimensions must agree.

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多