Nickolas 0 17 декабря, 2018 Опубликовано 17 декабря, 2018 · Жалоба 9 минут назад, Herz сказал: Ею я и пользуюсь. Но и для "любого" есть ограничения... Если уже пользуетесь, то, наверное, у вас есть какой-то цикл для вывода данных в файл. Тогда можно в этом цикле проверить элементы, которые могут быть NaN, фунцкией isnan(). В зависимости от результата проверки выбрать аргументы для fprintf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 17 декабря, 2018 Опубликовано 17 декабря, 2018 · Жалоба 2 minutes ago, Nickolas said: Если уже пользуетесь, то, наверное, у вас есть какой-то цикл для вывода данных в файл. Тогда можно в этом цикле проверить элементы, которые могут быть NaN, фунцкией isnan(). В зависимости от результата проверки выбрать аргументы для fprintf. Больше того, перед заполнением массива данными, я формирую пустой массив, весь состоящий из NaN. Эти NaN остаются там, куда не произошла перезапись реальными значениями. То есть, с тем же успехом я мог бы, например, подготовить массив нулей. Теперь я вывожу текстовый файл вот таким образом: fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix); Где последний столбец матрицы - числа с фиксированной десятичной точкой, и где может попадаться NaN. Подскажите, как я должен изменить аргументы функции, чтобы по результатам проверки вывести вместо NaN пробел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nickolas 0 17 декабря, 2018 Опубликовано 17 декабря, 2018 (изменено) · Жалоба Можно выводить не всю матрицу, а по строкам. for r_idx = 1 : size(matrix, 1) if ~isnan(matrix(r_idx, 1) fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :)); else fprintf(fid, ' %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :)); end end Изменено 17 декабря, 2018 пользователем Nickolas отредактировал код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 17 декабря, 2018 Опубликовано 17 декабря, 2018 · Жалоба Тогда уже так, наверное: for r_idx = 1 : size(matrix, 1) if ~isnan(matrix(r_idx, 1) fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :)); else fprintf(fid, '%4u %2u %2u %2u %2u \n', matrix(row_idx, :)); end end Да, можно попробовать. Несколько дольше должно получиться. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 17 декабря, 2018 Опубликовано 17 декабря, 2018 (изменено) · Жалоба 19 часов назад, Herz сказал: Изменено 18 декабря, 2018 пользователем Самурай . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hale 1 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба просто надо писать скрипт, составляющий текстовую(!) строку по твоим собственным правилам. и fprintf(). А если вы будете конвертацию типов оставлять на откуп системе, то время от времени будут вылезать неприятные казусы. Матлаб-Октава конечно умные на автоинициализацию, защиту переменных, объектов и на сборку мусора... но не всаегда думают так как вы хотите, выбирая типы. Это эе важно при работе с изображениями. я всегда только так делаю, потому что все равно надо шапку таблицам добавлять. В Octave сейчас можно и в Excel-таблицу записывать простые данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться