【问题标题】:Referencing current row while extended a matrix在扩展矩阵时引用当前行
【发布时间】:2019-02-11 16:21:04
【问题描述】:

如何在涉及矩阵的元素操作中引用当前行。这类似于 C++ 中的 this 指针。

具体来说,我正在尝试将另一列添加到矩阵“A”中,其中每个新单元格值都是使用当前行中现有元素之间的缩放器向量比较来计算的。

例如:

A = [1;2;3;4;5;6;7;8;9;10];
B = [2;4;6;5;3];

我希望“C”包含第二列,其中包含小于 A 中相应行元素的所有元素的计数。像这样:

C = 
 1  0
 2  0
 3  1
 4  2
 5  3
 6  4
 7  5
 8  5
 9  5
 10  5

我认为应该可以使用缩放器向量比较和对结果求和来做到这一点(即sum(B<A))。这不起作用:

>> C = [A, sum(B<A)]
error: mx_el_lt: nonconformant arguments (op1 is 5x1, op2 is 10x1)

这里 octave 解释器将 A(在 A&lt;B 语句中)视为向量。我不清楚为什么会这样,因为下面的代码行按预期工作(即 octave 将 A 视为当前行中的缩放器元素):

>> D = [A, A + 5];
D =
    1    6
    2    7
    3    8
    4    9
    5   10
    6   11
    7   12
    8   13
    9   14
   10   15

问题:完成我正在做的事情的正确方法是什么?有没有办法在元素明智的语句中引用“当前行变量”(即像 C = [A, sum(B

【问题讨论】:

  • 我不太明白你想做什么。当您说“我希望 'C' 包含第二列,其中包含小于 A 中相应行元素的所有元素的总和”时,您到底是什么意思?另外,sum(A&lt;B) A 和 B 有不同的维度,你不能这样比较。
  • 例如。 'A' 中的第五行是 5。'B' 中小于 5 的元素计数为 3,可以通过执行 sum(B&lt;5) 获得。现在“A”是10x1 向量,但在[] 的上下文中,运算符A 应该被视为具有“当前行”值的缩放器,就像我在上一个示例中演示的那样(即计算D)。跨度>

标签: matlab octave


【解决方案1】:

你快到了,但正如@Guille 所说,它不起作用,因为你有两个不同维度的向量。但是,您可以从这些值创建一个矩阵,这是 A(“当前行”)的每个值与 B 的比较:

A = [1;2;3;4;5;6;7;8;9;10];
B = [2;4;6;5;3];

C=[A sum(B'<A,2)];  %B'<A creates a 5x10 matrix and ',2' in sum adds up rowwise

【讨论】:

  • 太棒了!我认为这个问题来自于我错误地将[ ] 操作理解为逐行顺序操作(由于我在 C++ 等命令式编程语言方面的背景)。 [ ] 只是多个矩阵之间的合并,其中不同的变量在[ ] 的上下文中没有任何特殊含义。谢谢!
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多