【问题标题】:matrix assignment from a matrix A to a matrix B using conditional statements based on a third matrix C使用基于第三个矩阵 C 的条件语句从矩阵 A 到矩阵 B 的矩阵分配
【发布时间】:2013-01-16 15:40:45
【问题描述】:

我有两个问题,如果你可以回答:

Q1) 我有一个矩阵choice,其中每个人做出 4 个可能的选择,分别表示为 1、2、3 和 4。 我有三个矩阵A1A2A3,其中包含每个人和每个时间段的收入信息。假设我有 n 个人和 t 个时间段,所以 A1A2A3 是 n-by-t 和 choice 是 n-by-t。

现在我想创建另一个矩阵B,其中B 将根据选择矩阵中的值从A 中选择元素,即如果choice(n,t)==1,则B(n,t) = A1(n,t)。如果是choice(n,t)==2,那么B(n,t) = A2(n,t),以此类推。

我已经尝试了 for 循环和 if 语句,但我无法做到。请帮忙。

Q2) 我有一个收入矩阵AA 是 n×t 维度。有些人收入低,有些人收入高。假设任何收入

【问题讨论】:

  • 我基本上想在没有 for 循环的情况下执行此操作。我用 for 循环做了问题 1,但它需要更长的时间。但是,Q2 我做不到
  • 请展示你到目前为止所做的尝试(即发布一些真实的代码)。

标签: matlab matrix


【解决方案1】:

第一季度:

C = choice %else the code gets too long
B = A1 .* (C==1) + A2 .* (C==2) + A3 .* (C==3)

如果您只有 A1 A2 A3,我不确定您想如何处理 B 中的值“4”,但这应该可以。

[编辑]: 如果选项是“4”,那么对于上面定义的 B i,B 的那个元素将为 0。

第二季度: 这个有点模糊。也许这就是你想要的:

HighIncome = A > 1000
LowIncome = A <= 1000

如果不这样做,请更准确地解释您的目标。

[编辑]: 根据您对 Q2 稍微不那么含糊的解释,听起来您不希望这样:

A_high_income = A .* (A > 1000)
A_low_income = A .* (A <= 1000)
CHOICE_high_income = choice .* (A > 1000)
CHOICE_high_income = choice .* (A <= 1000)

高收入矩阵在低收入位置处为零,反之亦然。 恕我直言,这并没有多大意义,但这是我能得到的最接近你的描述。 如果不这样做,请按照我下面评论中的说明并发布一些示例。

【讨论】:

  • 所以在高收入和低收入中,我想要的是从矩阵A中挑选出只有高收入的人,然后从选择矩阵中挑选出他们对应的行。选择矩阵告诉我们这个人是选择扇区 1、2、3 还是 4。它是一个 n×t 矩阵。然后我们有收入矩阵 A,它也是一个 n×t 矩阵,它告诉我们每个部门的收入。现在我想要分别针对低收入人群和高收入人群的收入和选择矩阵。你能再帮忙吗。谢谢
  • 好吧,我还是不太明白你的意思。我建议你至少举一个矩阵 A、选择矩阵和你想要的高收入和低收入矩阵的例子。使它们成为 2x3 或类似的东西。当您说“选择”时,我不太明白您的意思是什么以及您的结果矩阵应该是什么“格式”。
【解决方案2】:

Q1:你可以使用三个简单的语句和一些逻辑索引。

B = A1;
B(choice == 2) = A2(choice == 2);
B(choice == 3) = A3(choice == 3);

Q2:要根据收入将 A 和选择分成两部分,您首先找到“低收入”行的索引并使用它从矩阵中获取行。

lowIncomeNdx = any(A < 1000, 2);
lowIncome = A(lowIncomeNdx, :);
lowIncomeChoice = choice(lowIncomeNdx, :);
highIncome = A(~lowIncomeNdx, :);
highIncomeChoice = choice(~lowIncomeNdx, :);

【讨论】:

  • 非常感谢。我会尝试两个
  • 所以在高收入和低收入中,我想要的是从矩阵A中挑选出只有高收入的人,然后从选择矩阵中挑选出他们对应的行。选择矩阵告诉我们这个人是选择扇区 1、2、3 还是 4。它是一个 n×t 矩阵。然后我们有收入矩阵 A,它也是一个 n×t 矩阵,它告诉我们每个部门的收入。现在我想要分别针对低收入人群和高收入人群的收入和选择矩阵。你能再帮忙吗。谢谢
  • @user1984196 是什么决定了一个人是否“高收入”?每个人在 A 中都会有多个收入值,有的可能低,有的可能高。如果您编辑原始问题以包含示例输入和输出矩阵以显示您正在尝试做的事情,这将真的很有帮助。
  • 如果一个人的收入低于某个数字,在收入矩阵的任何单元格中说 1000,他就是低收入。
  • @user1984196 我认为我的最新更新可以满足您的需求。请使用您在这些 cmets 中输入的澄清信息编辑问题。谢谢。
猜你喜欢
  • 2017-04-20
  • 2017-09-26
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2013-04-20
相关资源
最近更新 更多