(q / kdb +) заменить левое число в паре на ноль, если оба числа равны - PullRequest
0 голосов
/ 14 ноября 2018

Имея пример

(7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)

index   value
0   7.5 7.5
1   5.1 5.5
2   0 3f
3   1 1f

Как заменить левое число на ноль в каждой паре, если оба числа равны?

пример вывода

index   value
0   0 7.5
1   5.1 5.5
2   0 3f
3   0 1f

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Простой способ сделать это - использовать наречие each.

{$[x[0]=x[1];0,x[1];x]} each (7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)

Здесь функция if / else слева берет список из двух элементов и возвращает список, где 0 заменяет первый элемент, если оба элемента совпадают.Каждое наречие применяет эту функцию индивидуально к каждой паре чисел в списке.

0 голосов
/ 14 ноября 2018

Вы также можете использовать точечное исправление для векторов

q)a:(7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)
q){.[x;(where (=) . flip x;0);:;0f]} a
0   7.5
5.1 5.5
0   3
0   1
0 голосов
/ 14 ноября 2018
{(x[;0]*not x[;0]=x[;1]),'x[;1]} value

Эта функция должна поддерживать достойную производительность, так как длина списка становится очень большой

...