Transpor um tensor 3D reprensentado por arquivos

1

Eu tenho um tensor 3D de dimensão MxNxD data object. E esse objeto de dados é decomposto e armazenado em arquivos diferentes.

Inicialmente, cada fatia / matriz de dimensão MxN (primeiras duas dimensões) é salva em um arquivo separado. Cada linha contém uma linha da matriz. Elementos em uma linha são separados por espaço. Portanto, no total, há D desses arquivos.

Agora, gostaria de transpor o tensor 3D para que as duas últimas dimensões fiquem nos mesmos arquivos. Por exemplo, gostaria que M arquivos contivessem cada um NxD slice.

Exemplo

arquivo0:

000 010 020 030
100 110 120 130
200 210 220 230

arquivo1:

001 011 021 031
101 111 121 131
201 211 221 231

deve ser transposto para

out1:

000 010 020 030
001 011 021 031

out2:

100 110 120 130
101 111 121 131

out3:

200 210 220 230
201 211 221 231

Minhas perguntas são:

  • como fazer isso de maneira eficiente no script de shell ou no Python
  • existe algum formato de arquivo eficiente para fazer isso?
por xiaohan2012 22.03.2017 / 09:06

1 resposta

1

Solução em TXR Lisp:

(let* ((data [mapcar file-get-lines (glob "file*")]))
  (mapdo (op file-put-lines 'out@2' @1) (transpose data) (range 1)))

Executar:

$ ls
file0  file1  trans.tl
$ txr trans.tl
$ ls
file0  file1  out1  out2  out3  trans.tl
$ cat out1
000 010 020 030
001 011 021 031
$ cat out2
100 110 120 130
101 111 121 131
$ cat out3
200 210 220 230
201 211 221 231
    
por 22.07.2017 / 08:14