Dúvida: append arquivo txt dados numericos

10 views
Skip to first unread message

jmarcell...@ufpi.edu.br

unread,
Aug 14, 2016, 11:04:50 PM8/14/16
to Scipy-Brasil
Olá a todos

Tenho o seguinte problema:
quero salvar varias matrizes de mesma dimensão e valores diferentes em um mesmo arquivo texto. Tentei o código:

import numpy as np

matriz
= matrix([[1.01,2.5,3.9],[0.4,0.55,6.8],[7.0,8.0,9.89]])

np
.savetxt('matriz_arquivo.txt', matriz,fmt='%f')

np
.loadtxt('matriz_arquivo.txt')

    array([[ 1.01,  2.5 ,  3.9 ],
           
[ 0.4 ,  0.55,  6.8 ],
           
[ 7.  ,  8.  ,  9.89]])

Só que quando salvo outra matriz no arquivo, a matriz anterior é apagada. Como fazer para adicionar ao final tipo append?

Arnaldo Russo

unread,
Aug 15, 2016, 7:52:38 AM8/15/16
to scipy-...@googlegroups.com
Olá camarada,

Eu não entendi como você salvaria duas matrizes na mesma variável...
Mas... acho que seria possivel usar uma lista para tal.

import numpy as np
a = []
b = np.matrix([[1,2,3],[1,2,3]])
a.append(b)
a.append(np.matrix([[0,0,0],[0,0,0]]))

np.save('matriz_arquivo', a)

d = np.load('matriz_arquivo.npy')

In [23]: d
Out[23]: 
array([[[1, 2, 3],
        [1, 2, 3]],

       [[0, 0, 0],
        [0, 0, 0]]])

In [26]: d[0]
Out[26]: 
array([[1, 2, 3],
       [1, 2, 3]])


#agora você pode dar outros appends no seu array de matrizes, ou acessar as matrizes antigas já salvas
# mas primeiro tem que transformar o seu array em lista novamente
d = list(d)
d.append(np.matrix.....)

Existem outros módulos para salvar variáveis, como o próprio "pickle" (https://docs.python.org/2/library/pickle.html)
mas não sei se á a sua melhor solução.

Abraço


---
Arnaldo D'Amaral Pereira Granja Russo, Dr.
Universidade do Estado de Santa Catarina - UDESC
Pesquisador - Instituto Ambiental Boto Flipper
institutobotoflipper .org

--

---
Você recebeu essa mensagem porque está inscrito no grupo "Scipy-Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para scipy-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Flavio Coelho

unread,
Aug 15, 2016, 8:06:57 AM8/15/16
to scipy-...@googlegroups.com
Oi jmarcell0,

Use uma array com 3 dimensões, também conhecida como tensor.
Assim, suponha que a suas duas matrizes (A e B) tenham dimensão MxN:

vc cria uma matriz vazia:

T = np.empty ((M,N,2))
T[: , :, 0] = A
T[:, :, 1] = B
np.savetxt('matriz_arquivo.txt', T,fmt='%f')

espero que ajude.
--
Flávio Codeço Coelho
================
+55(21) 3799-5551
Professor
Escola de Matemática Aplicada 
Fundação Getulio Vargas
Praia de Botafogo, 190 sala 312
Rio de Janeiro - RJ
22250-900
Brasil

jmarcell...@ufpi.edu.br

unread,
Aug 15, 2016, 11:51:20 AM8/15/16
to Scipy-Brasil
Olá arnaldo

A ideia é salvar o salvar a matriz num arquivo txt e depois em outro momento salvar outra matriz ao final do arquivo. Eu onsegui com arquivo npy, mas o problema com esse arquivo é que quando aberto num editor de textos tudo fica alienígena, hehehe. pensei no txt por ser mais simples.
tentei abrir o arquivo e atribuir a uma variável, depois criar outra matriz e então concatenar e depois salvar, ma nao deu certo.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para scipy-brasil...@googlegroups.com.

jmarcell...@ufpi.edu.br

unread,
Aug 15, 2016, 11:57:11 AM8/15/16
to Scipy-Brasil
Olá flavio

Esqueci de informar que estou usando o sagemath. Quando uso o código ocorre o erro:

Error in lines 4-4
Traceback (most recent call last):
  File "/projects/sage/sage-6.10/local/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 947, in execute
    exec compile(block+'\n', '', 'single') in namespace, locals
  File "", line 1, in <module>
  File "/projects/sage/sage-6.10/local/lib/python2.7/site-packages/numpy/lib/npyio.py", line 1160, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('float64') and format specifier ('%e %e %e')

Que a princípio ha erro entre o formato do array e o formato que esta sendo gravado, mas tentei outras formatações e nao deu :(
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para scipy-brasil...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--

---
Você recebeu essa mensagem porque está inscrito no grupo "Scipy-Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para scipy-brasil...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Flavio Coelho

unread,
Aug 15, 2016, 12:10:03 PM8/15/16
to scipy-...@googlegroups.com
Acho que o erro está na formatação "%e":

TypeError: Mismatch between array dtype ('float64') and format specifier ('%e %e %e')

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para scipy-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

jmarcell...@ufpi.edu.br

unread,
Aug 15, 2016, 12:37:55 PM8/15/16
to Scipy-Brasil
Oi flavio
tentei mas continua com o mesmo erro.

jmarcell...@ufpi.edu.br

unread,
Aug 15, 2016, 12:47:38 PM8/15/16
to Scipy-Brasil
Já aproveitando a ideia, estou fazendo um tutorial do sagemath para incentivar o pessoal para o python:

https://cloud.sagemath.com/projects/c866c77f-ee7b-4d60-a777-22d3492d10b1/files/SAGE-7/

jmarcell...@ufpi.edu.br

unread,
Aug 16, 2016, 11:47:04 AM8/16/16
to Scipy-Brasil
O desenvolvedor Elton Lima do grupo Python Brasil apresentou uma solução para o problema:

import numpy as np


matriz1
= np.matrix([[9.0,9.0,9.0],[9.0,9.0,9.0],[9.0,9.0,9.0]])
matriz2
= np.matrix([[1.0,2.0,3.0],[0.4,0.5,0.6],[7.0,8.0,9.0]])


def record_matrix(file_path, matrix, file_mode="ab+"):
   
with open(file_path, file_mode) as matrix_fp:
        np
.savetxt(matrix_fp, matrix, fmt='%f')


def load_matrix(file_path):
    np
.loadtxt(file_path)


matrix_file_path
= "matrix.txt"
record_matrix
(matrix_file_path, matriz1)
record_matrix
(matrix_file_path, matriz2)
load_matrix
(matrix_file_path)


Reply all
Reply to author
Forward
0 new messages