Проблемы с пустой ячейкой в ​​большой матрице: MATLAB - PullRequest
2 голосов
/ 21 марта 2019

У меня есть большая матрица из 102730 строк в виде текстового файла (образец текстового файла прилагается) с некоторыми заголовочными файлами. Первый столбец показывает год, следующий за месяцем, за которым следуют день и значение1, значение2 и значение 3. Некоторые ячейки отсутствуют / пусты. Я хочу заполнить эти пустые ячейки NaN, чтобы они не мешали следующему значению.

Это входная матрица:

1970 01 13  21.0   6.1 06 000.0
1970 01 14  22.4   8.1 03 000.0
1970 01 15  21.2   8.1 04 000.0
1970 01 16  22.6   9.1 04 000.0
1970 01 17  22.8   9.1 02 000.0
1970 01 18  22.9   8.9 07 000.0
1970 01 19  23.8  10.8 04 000.0
1970 01 20  21.8  12.1 10 010.5
1970 01 21  19.8       06 012.9
1970 01 22  15.3   8.5 07 000.0
1974 06 28  39.2  25.6 03 000.0
1974 06 29  41.2  30.5 05 000.0
1974 06 30  40.3  31.2 07 000.0
1974 07 01  41.3  31.5 12 000.0
1974 07 02  43.3  31.3 20 000.0
1974 07 03  41.2       16 041.6
1974 07 04  34.3  21.4 14 054.5
1974 07 05  33.1  23.8 05 000.0
1974 07 06  36.2  28.9 06 000.0
1975 04 18  36.6  20.8 12 000.0
1975 04 19  37.4  21.1 05 000.0
1975 04 20  39.9  27.0 07 000.0
1975 04 21  39.5  27.3 09 000.0
1975 04 22                     
1975 04 23  39.5  27.1 08 000.0
1975 04 24  37.7  26.0 10 000.0
1975 04 25  38.7  27.2 15 000.0

Желаемая выходная матрица:

1970 01 13  21.0   6.1 06 000.0
1970 01 14  22.4   8.1 03 000.0
1970 01 15  21.2   8.1 04 000.0
1970 01 16  22.6   9.1 04 000.0
1970 01 17  22.8   9.1 02 000.0
1970 01 18  22.9   8.9 07 000.0
1970 01 19  23.8  10.8 04 000.0
1970 01 20  21.8  12.1 10 010.5
1970 01 21  19.8  Nan  06 012.9
1970 01 22  15.3   8.5 07 000.0
1974 06 28  39.2  25.6 03 000.0
1974 06 29  41.2  30.5 05 000.0
1974 06 30  40.3  31.2 07 000.0
1974 07 01  41.3  31.5 12 000.0
1974 07 02  43.3  31.3 20 000.0
1974 07 03  41.2  Nan  16 041.6
1974 07 04  34.3  21.4 14 054.5
1974 07 05  33.1  23.8 05 000.0
1974 07 06  36.2  28.9 06 000.0
1975 04 18  36.6  20.8 12 000.0
1975 04 19  37.4  21.1 05 000.0
1975 04 20  39.9  27.0 07 000.0
1975 04 21  39.5  27.3 09 000.0
1975 04 22  Nan   Nan  Nan Nan                     
1975 04 23  39.5  27.1 08 000.0
1975 04 24  37.7  26.0 10 000.0
1975 04 25  38.7  27.2 15 000.0

Как попытка, сначала я попробовал это:

T = readtable('sample.txt') ;

Вышеупомянутый код не работал, так как он запутался и дал неправильное число столбцов, когда перед десятичной дробью есть 2 цифры. Во-вторых, я нашел эту ссылку: Создание новой матрицы из ячейки с несколькими пустыми ячейками без учета пустых ячеек

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

inds = ~cellfun('isempty', elem); %elem to be replaced as sample

Я также узнаю способ обнаружения пустых ячеек здесь: Как я могу обнаружить пустые ячейки в массиве ячеек?

но я не мог понять, как читать данные из текстового файла, учитывая эти пустые ячейки.

Может ли кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 21 марта 2019

Поскольку R2019a , вы можете просто использовать readmatrix :

>> myMat = readmatrix('sample.txt')

Из документов:

Для текстовых файлов с разделителямифункция импорта преобразует пустые поля в файле в NaN (для числовой переменной) или в пустой символьный вектор (для текстовой переменной).Все строки в текстовом файле должны иметь одинаковое количество разделителей.Функция импорта игнорирует незначительные пробелы в файле.



Для предыдущих выпусков вы можете использовать deteImportOptions объект при вызове readtable :

% Detect options.
>> opts = detectImportOptions('sample.txt');
% Read table.
>> myTable = readtable('sample.txt',opts);
% Visualise last rows of table.
>> tail(myTable)

ans =

  8×7 table

    Var1    Var2    Var3    Var4    Var5    Var6    Var7
    ____    ____    ____    ____    ____    ____    ____

    1975     4       18     36.6    20.8     12       0 
    1975     4       19     37.4    21.1      5       0 
    1975     4       20     39.9      27      7       0 
    1975     4       21     39.5    27.3      9       0 
    1975     4       22      NaN     NaN    NaN     NaN 
    1975     4       23     39.5    27.1      8       0 
    1975     4       24     37.7      26     10       0 
    1975     4       25     38.7    27.2     15       0 

Для вашего текстового файла detectImportOptions заполняет пропущенные значения с помощью NaN:

>> opts.VariableOptions

Если желаемый результат представляет собой матрицу, вы можете использовать table2array :

>> myMat = table2array(myTable)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...