Matrix 如何动态计算增长的总和?

Matrix 如何动态计算增长的总和?,matrix,apl,dyalog,Matrix,Apl,Dyalog,我有以下数据: a b c d 5 9 6 0 3 1 3 2 第一行中的字符,第二行和第三行中的数字 如何根据第3行中的数字更改第二行 例如,在第3行中,如果数字为3,则第2行中的相应数字乘以2,如果第3行中的数字为1,则将第2行中的数字加上3: a b c d 10 12 12 0 3 1 3 2 此外,我如何动态计算这些增长的总和 Dyalog APL 17.0+从条件掩码创建一个乘数向量和一个加法向量 n⌷数据获取n第a行数据矩阵 要加倍的第二行的列由以下列指示:

我有以下数据:

a b c d
5 9 6 0
3 1 3 2
第一行中的字符,第二行和第三行中的数字

如何根据第3行中的数字更改第二行

例如,在第3行中,如果数字为3,则第2行中的相应数字乘以2,如果第3行中的数字为1,则将第2行中的数字加上3:

a  b  c  d
10 12 12 0
3  1  3  2
此外,我如何动态计算这些增长的总和


Dyalog APL 17.0+

从条件掩码创建一个乘数向量和一个加法向量

n⌷数据
获取
n
第a行
数据
矩阵

要加倍的第二行的列由以下列指示:

      3=3⌷data
1 0 1 0
所以乘法向量是:

      1+3=3⌷data
2 1 2 1
      3×1=3⌷data
0 3 0 0
要添加3的第二行的列为:

      1=3⌷data
0 1 0 0
所以加法向量是:

      1+3=3⌷data
2 1 2 1
      3×1=3⌷data
0 3 0 0
因此,新的第二行是:

      (3×1=3⌷data)+(1+3=3⌷data)×2⌷data
10 12 12 0
我们可以将其表示为一个二元函数,将第三行作为左参数(控件),第二行作为右参数(实际数据):

现在,我们可以使用更新的值创建一个新矩阵:

      (3⌷data) Update@2 ⊢data
 a  b  c d
10 12 12 0
 3  1  3 2
或者更换是否到位:

      (2⌷data) Update⍨← (3⌷data)
      data
 a  b  c d
10 12 12 0
 3  1  3 2


请注意,如果将具有不同角色的数据保存在不同的变量中,则算法会简化,代码运行速度也会加快。例如:

      (keys values control)←↓data
      control Update values
10 12 12 0
      values Update⍨← control
      values
10 12 12 0
      ↑keys values control
 a  b  c d
10 12 12 0
 3  1  3 2


增加值之和就是新值和原始值之间的差值之和:

      +/values-⍨control Update values
14

在NARS2000中(我不知道是否也适用于其他APL编译器),
"⍵[2;],¨⍵[3;]“制作两对两行的⍵, 第n.2行和第n.3行

  f←{(a b)←⍵⋄b=3:2×a⋄b=1:a+3⋄a}
  h←{3 4⍴⍵[1;],(f¨⍵[2;],¨⍵[3;]),⍵[3;]}
  B←3 4⍴'abcd',5 9 6 0 3 1 3 2
  ⎕fmt B
┌4───────┐
3 a b c d│
│ 5 9 6 0│
│ 3 1 3 2│
└+───────┘
  ⎕fmt h B
┌4──────────┐
3  a  b  c d│
│ 10 12 12 0│
│  3  1  3 2│
└+──────────┘

我有一些问题。如果数字既不是1也不是3怎么办?2.你想要什么?更新的第二行或值增加了多少?3.17+在这里是什么意思?如果数字不是1和不是3,则无需执行任何操作。在输出中,只需打印upd行,并更改编号,而不更改。我想看看第二排的数字increased@AbhaySehgal我已经澄清,“17+”指的是或更新的。@cickness您可能对经常光顾感兴趣,在那里您可以找到初学者和专家级应用程序开发者。