Создайте вектор множителя и вектор сложения из масок условий.
n⌷data
возвращает вам n
th строку матрицы data
.
Столбцы второго строка, которую вы хотите удвоить, обозначается:
3=3⌷data
1 0 1 0
Таким образом, вектор умножения:
1+3=3⌷data
2 1 2 1
Столбцы второй строки, к которым вы хотите добавить 3, представляют собой:
1=3⌷data
0 1 0 0
Итак, вектор сложения:
3×1=3⌷data
0 3 0 0
Новая вторая строка выглядит следующим образом:
(3×1=3⌷data)+(1+3=3⌷data)×2⌷data
10 12 12 0
Мы можем express это как диади c функция, принимающая 3-ю строку в качестве левого аргумента (элемент управления) и вторую строку в качестве правого аргумента (фактические данные):
Update←{(3×1=⍺)+(1+3=⍺)×⍵}
(3⌷data) Update (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
Попробуйте онлайн!