Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 10.05.2017, 11:25   #1
ViktorR
Профессионал
 
Регистрация: 23.10.2010
Сообщений: 1,137
Репутация: 603
По умолчанию NumPy и чтение/запись массива в файл

Изучаю Python.
ОС Winows 10 (64)
Python 3.6.1
NumPu 1.12.1 ставил через pip.

При работе с модулем NumPy столкнулся с такой проблемой:
При записи массива в текстовый файл (5 строк, 2 столбца):
Код:

fhou = open(ouf, 'wt')
np.savetxt(fhou, MyMatr, fmt='% .5f')

Выдается сообщение вида:
TypeError: Mismatch between array dtype ('float64') and format specifier ('% .5f % .5f')
В сети нашел ответ (годичной давности), из которого следует, что файл следует открывать в бинарной моде или перейти на NumPy 1.11.1:
Код:

fhou = open(ouf, 'wb')
np.savetxt(fhou, MyMatr, fmt='% .5f')

Попробовал. Да, работает, но массив пишется строкой, без разбивки на столбцы (как бы хотелось).
Возможно кто то решал этот вопрос?
Поделитесь информацией.
И да, в NumPy 1.11.1 это будет работать?
__________________
Как-то так, ...
ViktorR вне форума   Ответить с цитированием
Старый 12.05.2017, 12:44   #2
ViktorR
Профессионал
 
Регистрация: 23.10.2010
Сообщений: 1,137
Репутация: 603
По умолчанию

Редактировать свой пост видимо поздно.
ОС Winows 10 (64)
Перепроверил и переустановил Python.
Была установлена 32-бит версия. Установил 64-бит.
Теперь:
Python 3.6.1 (64-bit)
NumPu 1.13.0 (64-bit)

При записи матрицы (например, массив 3х3) в текстовый файл, если файл открыт как текстовый:
Код:

fhou = open(ouf, 'wt')
np.savetxt(fhou, MyMatr)

Как и прежде выдается сообщение вида:
TypeError: Mismatch between array dtype ('float64') and format specifier ('%.18e %.18e %.18e')
Так получается, что мой массив имеет тип float64, и этот тип не совпадает с заданным по умолчанию.
Но если изменить тип данных на другой - такая же фигня.

Ответ в сетях годичной давности...
В нем рекомендуют открывать файл в бинарной моде.
Код:

fhou = open(ouf, 'wb')
np.savetxt(fhou, MyMatr)

И это по-прежнему работает в новых условиях.
Но дело в том, что данные записываются в одну строку, даже если задать параметр delimiter = '\n'.

И тут дело не в том, что можно писать через write() и формировать нужный вид в текстовом файле. Это просто и получается нормально.
Но вот в NumPy есть и такой вариант, когда можно инициализировать массив, прочитав данные из форматированного текстового файла. Например:
Код:

MyMatr1 = np.loadtxt(fh_i, dtype=np.float, ndmin = 1)
print(MyMatr1)

И это работает хорошо.
Но при чтении такого файла надо заранее знать из чего же он был сделан ...

Возможно, что я сильно не ...
Возможно, что этот метод, хотя и позиционируется как для сохранения в текстовом файле, так и не должен работать?
В этом я сильно сомневаюсь. Но я новичок и ...
__________________
Как-то так, ...
ViktorR вне форума   Ответить с цитированием
Старый 12.05.2017, 12:52   #3
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,332
Репутация: 3200

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Да, работает, но массив пишется строкой, без разбивки на столбцы (как бы хотелось).
Как именно пишется? И чем вы смотрите? Может там просто \n без \r, а вы блокнотом открываете?
Alex11223 вне форума   Ответить с цитированием
Старый 12.05.2017, 13:24   #4
ViktorR
Профессионал
 
Регистрация: 23.10.2010
Сообщений: 1,137
Репутация: 603
По умолчанию

Да, смотрел Блокнотом.
Но вот конкретно:
Матрица 3х3 получена методом:
Код:

import numpy as np
Matr = (b-a)*np.random.random(size=(n,n)) + a
....
fh_o = open(file_o, 'wb')
np.savetxt(fh_o, MyMatr,fmt = ' %8.4f', delimiter = '\n' )
fh_o.close()
fh_o = open(file_o, 'wb')
np.savetxt(fh_o, MyMatr,fmt = ' %8.4f', delimiter = '\n' )
fh_o.close()

Результат во вложении:

Если смотреть FAR'ом, то там каждое число завершается символом 0A hex.
Это Line Feed и в FAR - это столбец, но не матрица, т.к. группа символов должна повториться через 3 числа, как бы ...
Ожидание вида в другом файле. Или я тут вновь что-то проглядел ...

PS:
Кажись начинаю вникать ...
Сделал так и получил, см. третье вложение.
np.savetxt(fh_o, MyMatr,fmt = ' %8.4f', delimiter = '\n\r' )
Если в FAR'e то ...
Буду думать ...

PSS:
И о ДА ... а ... а ...
Код:

np.savetxt(fh_o, MyMatr,fmt = ' %8.4f')

Пишет с нужной разбивкой, но без ...
Век учись ...
Спасибо за подсказку.
Вложения
Тип файла: txt tstNewNumPy.txt (90 байт, 2 просмотров)
Тип файла: txt Wait2.txt (84 байт, 3 просмотров)
Тип файла: txt tstNewNumPy1.txt (96 байт, 1 просмотров)
__________________
Как-то так, ...

Последний раз редактировалось ViktorR; 12.05.2017 в 13:43.
ViktorR вне форума   Ответить с цитированием
Старый 12.05.2017, 13:46   #5
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,332
Репутация: 3200

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
\n\r
\r\n или открывать в нормальном редакторе надо.
Alex11223 вне форума   Ответить с цитированием
Старый 12.05.2017, 14:09   #6
ViktorR
Профессионал
 
Регистрация: 23.10.2010
Сообщений: 1,137
Репутация: 603
По умолчанию

Обида берет за то, что потратил много времени и что ведь все это знал.
Да вот как придет беда ...
В подобную ситуацию раньше попадал, да вот видимо мало били
Не засело в кость мозга.
Да и delimiter другую роль играет - это разделитель между числами, в данной ситуации, а не символ, который разделяет строки.
Так что все заработало и без delimiter
__________________
Как-то так, ...
ViktorR вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись в файл (С++) ura11_98 Помощь студентам 1 23.05.2016 20:13
Вопрос Сохранение массива в файл и чтение массива из файла vvzvlad Помощь студентам 2 05.11.2013 23:27
Запись и чтение символьного массива в файл/из файла (C++) Noyabr Помощь студентам 6 22.01.2012 13:59
Чтение/запись массива объектов в файл MrBrain Общие вопросы .NET 0 08.06.2010 10:44


14:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru