WedX - журнал о программировании и компьютерных науках

Удалите заполнение пробелами в выводе файла matlab fprintf

У меня есть большие матрицы данных, которые выглядят примерно так:

DataOut' = [34 1 0.0 -4.75343000000000 0.0291776000000000 5.32835000000000 1.23598000000000 0.890008000000000;
7 1 0.0902364000000000 -4.74065000000000 0.0 1.97133000000000 9.49706000000000 16.1658000000000]

Первые два столбца — это идентификаторы и всегда целые числа, а остальные 6 столбцов — это 2 пары координат (X, Y, Z) (плавающие числа) для каждого соответствующего идентификатора.

Я пишу данные в файл, используя следующий синтаксис:

fprintf(' %u %u %-6.12g %-6.12g %-6.12g %-6.12g %-6.12g %-6.12g \r\n', DataOut)
>>  34 1 0      -4.75343 0.0291776 5.32835 1.23598 0.890008 
    7 1 0.0902364 -4.74065 0      1.97133 9.49706 16.1658  

Этот формат удобен почти во всех случаях, кроме одного, выделенного выше, где незначащие конечные нули заменяются пробелами, что приводит к большому разрыву между некоторыми столбцами вместо одного пробела. Программное обеспечение, читающее эти данные, действительно не любит все эти пробелы и ломается, когда находит больше, чем ожидалось.

Мой желаемый результат - иметь только один пробел между каждым столбцом:

>> 34 1 0 -4.75343 0.0291776 5.32835 1.23598 0.890008 
   7 1 0.0902364 -4.74065 0 1.97133 9.49706 16.1658

Кто-нибудь знает, как заставить fprintf просто оставить один пробел после удаления незначащих конечных нулей? Использование fprintf приятно, потому что мне не нужны никакие циклы, и когда у вас есть несколько тысяч этих матриц, которые нужно записать, я думаю, что это было бы довольно медленно, если бы мне пришлось выполнять некоторую проверку в цикле?


Ответы:


1

Спецификация формата, которую вы использовали для типов чисел с плавающей запятой (%-6.12g), в которых вы хотите удалить незначащие конечные нули (максимум 12 чисел после десятичной точки). Однако -6 указывает, что каждое поле должно иметь ширину минимум 6 символов. В случае вашего 0 он имеет ширину 1, поэтому fprintf дополнит его шириной 6 символов (отсюда и все пробелы). Если вы просто удалите -6 в начале каждого из ваших спецификаторов формата, вы получите желаемый результат.

fprintf(' %u %u %.12g %.12g %.12g %.12g %.12g %.12g \r\n', DataOut)

% 34 7 1 1 0 0.0902364 -4.75343 -4.74065 
% 2.917760e-02 0 5.32835 1.97133 1.23598 9.49706 0.890008 16.1658
14.07.2016
  • Но это просто оставит меня с 12 нулями, что сделает файл намного больше, чем он должен быть - я говорю о разнице в 150 ГБ, которая становится 200 ГБ в некоторых случаях, когда есть много значений 0,0. 14.07.2016
  • Большой!! Я смотрел на это в течение часа, но не заметил этого! 14.07.2016
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]