Как проиндексировать коврик с 2 столбцами из другого коврика?

У меня есть список имен (текстовая матрица) nl43 и несколько индексов в нем (в gr43), и я хотел бы присвоить индекс элементов по 4-му и 5-му столбцам gr43 двум переменным, A и B. При доступе к одному столбцу это будет nl43[gr43[;Column];], но мои пальцы просто отказывались копировать и вставлять этот оператор для выполнения второго присваивания, потому что мой инстинкт подсказывал, что должен быть более простой способ ;-)


person MBaas    schedule 23.01.2015    source источник


Ответы (2)


Итак, я наконец нашел (A B)←⊂[1 3]nl43[gr43[;4 5;] и, к сожалению, разочарован собой, так как мне никогда не приходило в голову переосмыслить этот момент раньше. Теперь, когда я сам ответил на этот вопрос, я полагаю, что не так много возможностей для уточнения ???

Хм, есть вложенный способ сделать это: (A B)←(⊂nl43){⍺[gr43[;⍵];]}¨4 5 Я не решался даже взглянуть на него, потому что он показался мне слишком "топорным". Но с точки зрения производительности это явный победитель: 0,234 с против 0,64 !!

Комментарии? ;-)

person MBaas    schedule 23.01.2015
comment
Первоначально я хотел опубликовать это как реальный вопрос (после этого предложения от моего инстинкта...). Но потом я подумал, что немного RTFM поможет, и это помогло. Тем не менее, процесс может быть интересным, и, поскольку самостоятельные ответы явно поощряются, я подумал, что это может быть хорошим способом получить какое-то действие для тега APL :-) - person MBaas; 23.01.2015

Как аналог чего-то вроде

  '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 к индексации в прошлом, но никогда не использовал ничего, кроме вектора. Интересно, как такое расширенное индексирование может работать с матрицами и многомерными массивами.

person Lobachevsky    schedule 27.01.2015
comment
Это можно сделать с помощью индексации отрядов (представлено в Dyalog 14, IIRC): (⊂3 1 20)(⊂18 1 20)(⊂6 1 20)⌷¨⊂'abcdefghijklmnopqrstuvwxyz' - person MBaas; 27.01.2015
comment
Будет ли хорошее решение Squad-индексации для задачи судоку, когда у вас есть матрица 9 x 9 и вы хотите разбить ее на матрицу 3 x 3 матриц 3 x 3? то есть SudokuMat[ (1 2 3) (4 5 6) (7 8 9) ; (1 2 3) (4 5 6) (7 8 9) ] - person Lobachevsky; 28.01.2015
comment
Хм, хорошая команда - сложная задача, я понятия не имею, извините. Я бы сделал ↑(⊂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