Есть ли в Matlab встроенная функция, которая экспортирует строковый массив в csv и наоборот? - PullRequest
0 голосов
/ 22 июня 2019

Теперь, когда строковый массив - вещь, существующая после R2016b, есть ли встроенная функция, которая экспортирует строковый массив в файл CSV и наоборот?

Функция, которая выполняет прежнюю роль csvread и csvwrite для числовых массивов в старые времена, но для строковых массивов. И чтобы ослабить требование, скажем, массив строк содержит столбцы чистых строк и столбцы чистых двойников. В качестве примера можно привести цены на акции со строками отметок времени.

Native = не зацикливается на fprintf. Но если вы уверены, что Matlab еще не включил такие функции, не стесняйтесь отвечать наилучшим образом, без каких-либо ограничений.


Без какой-либо встроенной функции, предшествующей R2013a, цикл с fprintf - единственный способ, о котором я могу думать. И это было ужасно. Учитывая прошлую репутацию неэффективности, я все еще не верю, что циклы в Matlab.

После R2016b можно преобразовать строковый массив в массив ячеек с помощью num2cell, а затем в таблицу с cell2table. Таблица может быть записана в CSV-файл с writetable. На самом деле это быстро, как writetable быстро. Только num2cell немного замедляет весь процесс. Однако форматирование невозможно по пути.

Post-R2019a, cell2table можно пропустить с помощью writecell, что хорошо, но трудоемкий (слегка) шаг равен num2cell, и форматирование все еще невозможно. (У меня нет R2019a, чтобы проверить это.)

Есть ли лучший способ или это еще одна из тех базовых вещей, которые оставляют желать лучшего в Matlab?

1 Ответ

1 голос
/ 22 июня 2019

writematix и readmatrix - это функции, которые должны выполняться с R2019a.

%If S1 is a string array that you want to `foobar.csv` then:
writematrix(S1,'foobar.csv');

%To read this csv file back into MATLAB as the same string array, use:
S2 = readmatrix('foobar.csv','OutputType','string');

%Verifying the result:
isequal(S1,S2)
ans =
  logical
   1

Петли были значительно улучшены с R2015b. Не все циклы являются медленными и не все векторизованные версии быстрее. Правильный подход - timeit , если есть сомнения.

...