Форматный тип чтения матрицы из файла?

#matlab #file #types #format

#matlab #файл #типы #формат

Вопрос:

Я сохранил матрицу в file.txt ; тип матрицы выглядит следующим образом:

 file: 0.010993,0.21973,0.012142,0.49897,0.24634,0.01183 
 

Когда я открываю матрицу с помощью

 Matrix= dlmread( 'File.txt') ) ;
 

Matlab принимает только 4 числа после точки, где матрица:

 Matrix: 0.0110    0.2197    0.0121    0.4990    0.2463    0.0118
 

Я не хочу менять числа после матрицы.

Ответ №1:

Проверка рабочей области:

Без каких-либо изменений и простой проверки переменной Matrix в окне workspace показывает, что сохранены полные значения и что MATLAB просто выбирает отображение только определенного количества цифр:

 Matrix = dlmread('File.txt')
 

Матрица рабочей области


Изменение формата отображения:

Если вы настроите формат отображения long , вы увидите, что MATLAB извлекает все десятичные дроби из текстового файла и может отображать их в окне командной строки. Кроме того, открытие array Matrix на панели workspace и щелчок по ячейкам также проверяет, учтены ли все десятичные числа. Для получения более подробной информации о параметрах отображения: Документация Matlab: Установите формат отображения вывода командного окна.

Примечание: «Числовые форматы влияют только на то, как числа отображаются в выводе окна командной строки, а не на то, как MATLAB® вычисляет или сохраняет их».

 format long
Matrix = dlmread('File.txt')
 

Формат отображения Длинный результат


Расширение: проверка суммы

 format long
Matrix = dlmread( 'File.txt') ;
sum(Matrix)

sum([0.010993,0.21973,0.012142,0.49897,0.24634,0.01183])
 

Проверка калькулятора Google

Проверка суммы результатов


Взятие суммы VPA:

 format long
Matrix = dlmread('File.txt') ;
sum(vpa(Matrix))

sum(vpa([0.010993,0.21973,0.012142,0.49897,0.24634,0.01183]))
 

Сценарий игровой площадки:

Тестирование различных методов отображения и подходов к получению sum() .

 x = [0.010097,0.19957,0.011086,0.49413,0.27437,0.010745];
sum(vpa(x))

x = [0.010097000000000 0.199570000000000 0.011086000000000 0.494130000000000 0.274370000000000 0.010745000000000];
sum(vpa(x))

%%
format short
x = [0.010097,0.19957,0.011086,0.49413,0.27437,0.010745];
sum(x)

x = [0.010097000000000 0.199570000000000 0.011086000000000 0.494130000000000 0.274370000000000 0.010745000000000];
sum(x)

%%
format long
x = [0.010097,0.19957,0.011086,0.49413,0.27437,0.010745];
sum(x)

x = [0.010097000000000 0.199570000000000 0.011086000000000 0.494130000000000 0.274370000000000 0.010745000000000];
sum(x)
 

Запускался с использованием MATLAB R2019b

Комментарии:

1. Я знаю этот метод, но он не полезен для меня, я хочу, чтобы сумма строки == 1. где сумма [x=[0.010097,0.19957,0.011086,0.49413,0.27437,0.010745] равно 1, но сумма [0,010097000000000 0,199570000000000 0,011086000000000 0,494130000000000 0,274370000000000 0,010745000000000] равна 0,999998000000000

2. Я получаю 0.999998 для обоих массивов в вашем комментарии. Я в замешательстве? Если у вас установлен формат as short , то для обоих результатов будет отображаться 1. Если вы хотите проигнорировать формат vpa() , в котором используются массивы / матрицы перед sum() , может быть вариант.

3. Большое вам спасибо за вашу помощь. У меня большой код, я не могу изменить весь код, я должен прочитать хорошие значения из файла. сумма до и после format long отличается. vpa не является решением

4. Числа, считываемые из текстового файла, имеют одинаковые десятичные цифры, разница лишь в том, что есть дополнительные конечные нули.

5. Я хочу прочитать то же значение файла. вот и все. Я не буду менять формат чтения