2015-01-23 2 views
2

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

ответ

0

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

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

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

+0

Я изначально хотел опубликовать это как реальный вопрос (после этого предложения от моего инстинкта ...). Но потом я подумал, что некоторые RTFM помогут, и это так. Тем не менее, процесс может быть интересным, и, поскольку ответы на явные ответы очень приветствуются, я подумал, что это может быть хороший способ получить некоторые действия для APL-тега :-) – MBaas

0

В качестве аналога к чему-то вроде

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

+0

Это можно сделать с помощью индексации (в Dialog) 14, IIRC): '(⊂3 1 20) (⊂18 1 20) (⊂6 1 20) ⌷¨⊂'abcdefghijklmnopqrstuvwxyz'' – MBaas

+0

Будет ли хорошее решение для индексирования Squad для проблемы Sudoku, где у вас есть 9 x 9 и хотите разбить его на матрицу 3 x 3 из 3 x 3 матриц? i.e. 'SudokuMat [(1 2 3) (4 5 6) (7 8 9); (1 2 3) (4 5 6) (7 8 9)] ' – Lobachevsky

+0

Хм,« хорошая команда »- это сложная задача, я понятия не имею, извините. Я бы сделал '↑ (⊂1 0 0 1 0 0 1 0 0) ⊂ [1] ¨1 0 0 1 0 0 1 0 0⊂SudokuMat'' ⍝ ⎕ML = 1' – MBaas