У меня есть список имен (текстовая матрица) nl43
и несколько индексов в нем (в gr43
), и я хотел бы присвоить индекс элементов по 4-му и 5-му столбцам gr43
двум переменным, A
и B
. При доступе к одному столбцу это будет nl43[gr43[;Column];]
, но мои пальцы просто отказывались копировать и вставлять этот оператор для выполнения второго присваивания, потому что мой инстинкт подсказывал, что должен быть более простой способ ;-)
Как проиндексировать коврик с 2 столбцами из другого коврика?
Ответы (2)
Итак, я наконец нашел (A B)←⊂[1 3]nl43[gr43[;4 5;]
и, к сожалению, разочарован собой, так как мне никогда не приходило в голову переосмыслить этот момент раньше. Теперь, когда я сам ответил на этот вопрос, я полагаю, что не так много возможностей для уточнения ???
Хм, есть вложенный способ сделать это: (A B)←(⊂nl43){⍺[gr43[;⍵];]}¨4 5
Я не решался даже взглянуть на него, потому что он показался мне слишком "топорным". Но с точки зрения производительности это явный победитель: 0,234 с против 0,64 !!
Комментарии? ;-)
Как аналог чего-то вроде
'abcdefghijklmnopqrstuvwxyz'[3 3 reshape 3 1 20 18 1 20 6 1 20] // []A instead of abcde... in Dyalog
cat
rat
fat
// result is a matrix
Я интуитивно ожидаю, что вложенный аргумент для индексации также будет работать.
'abcdefghijklmnopqrstuvwxyz'[(3 1 20) (18 1 20) (6 1 20)]
cat rat fat
// result is a vector of vectors
Увы, это не реализовано или еще не реализовано. Я использовал аналогичный подход dfn к индексации в прошлом, но никогда не использовал ничего, кроме вектора. Интересно, как такое расширенное индексирование может работать с матрицами и многомерными массивами.
(⊂3 1 20)(⊂18 1 20)(⊂6 1 20)⌷¨⊂'abcdefghijklmnopqrstuvwxyz'
- person MBaas; 27.01.2015
SudokuMat[ (1 2 3) (4 5 6) (7 8 9) ; (1 2 3) (4 5 6) (7 8 9) ]
- person Lobachevsky; 28.01.2015
↑(⊂1 0 0 1 0 0 1 0 0)⊂[1]¨1 0 0 1 0 0 1 0 0⊂SudokuMat
⍝ ⎕ML=1
- person MBaas; 28.01.2015