Запишите два вектора Matlab в файл и вставьте обратную косую черту между векторами

Данный

a=[1 2 3];
b=[4 5 6];
Output in file should look like:
1 2 3 / 4 5 6

Есть ли способ добиться этого за один вызов fprintf()?

У меня есть решение, в котором между a и b нет обратной косой черты.

fprintf(fileID, '%d %d ', a, b);
output:
1 2 3 4 5 6 (no backslash in between)

Так что добавьте косую черту... fprintf(fileID, '%d / %d ', a, b);

Wolfie 31.01.2023 14:47

Это добавит обратную косую черту после каждого элемента, то есть 1 / 2 / 3 / 4 / 5 / 6

Simon 31.01.2023 14:55

Почему это должен быть один звонок fprintf? Просто сделайте три.

Cris Luengo 31.01.2023 15:08

Конечно, это может быть три звонка. Я просто хотел убедиться, что нет очевидного решения (которого я не вижу) моей проблемы.

Simon 31.01.2023 15:11
fprintf(fileID, '%d %d %d / %d %d %d ', a, b) затем вы можете сгенерировать спецификацию формата, используя repmat, чтобы повторить %d для стольких элементов, сколько есть у a или b
Wolfie 31.01.2023 15:26

Что такое идентификатор файла?

iohans 31.01.2023 15:41

@iohans Файл, в который должны быть записаны выходные данные, возвращенные `fileID= fopen('my_file.txt')´

Simon 31.01.2023 15:51
sprintf('%d%c',[a,b;+' / '])
rahnema1 31.01.2023 17:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить один вызов fprintf, если хотите динамически построить строку формата.

fileID=1;
a=[1,2,3];
b=[4,5,6,7];
c=[8,9];

fprintf(fileID,strjoin(cellfun(@(c)sprintf('%d ',c),{a,b,c},'UniformOutput',false),'/ '));

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

Что бы это ни стоило, вызов cellfun на самом деле просто «замаскированная петля», он только визуально однострочный и не помогает ни в чем другом (например, в производительности), но это действительно отвечает на букву вопроса, поэтому +1

Wolfie 31.01.2023 19:18

Правда, cellfun, вероятно, даже добавляет немного накладных расходов. Я имел в виду замену многих обращений к fprintf множеством обращений к sprintf. Если вы можете позволить себе накладные расходы, то таким образом я ускорил время выполнения.

FragileX 31.01.2023 20:05

Другие вопросы по теме