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您可能对经常光顾感兴趣,在那里您可以找到初学者和专家级应用程序开发者。