2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 08:13 


26/09/17
341
Требуется к первому числу "приклеить" второе, например: на входе вектор [3 1], на выходе число 31.
Есть ли такая возможность в среде Матлаб?

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 09:32 


17/10/16
4828
maximkarimov
Первое умножить на 10 и сложить со вторым?

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 10:43 
Заслуженный участник


23/05/19
1163
Вот тут есть пара вариантов
https://www.mathworks.com/matlabcentral ... ype-double

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 11:46 
Заслуженный участник


18/09/21
1756
Используется синтаксис Matlab M
[3 1]*10.^[1:-1:0]'
str2num(num2str([3 1], "%1d"))

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 14:07 


26/09/17
341
Уважаемый zykov, если в последней строчке Вашего кода исправить две ошибки синтаксиса вот так:
Используется синтаксис Matlab M
str2num(num2str([33 24], '%1.d'))
, то она работает и дает искомый результат.
Спасибо огромное!

-- 13.01.2024, 15:21 --

zykov в сообщении #1625745 писал(а):
Используется синтаксис Matlab M
[3 1]*10.^[1:-1:0]'
str2num(num2str([3 1], "%1d"))

Упс!) В общем случае не работает(( Например:
Используется синтаксис Matlab M
str2num(num2str([333 24], '%1.d'))

Причем не могу понять когда "склейка" выполняется, а когда нет. Подскажите?

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 14:26 
Заслуженный участник


18/09/21
1756
У меня без точки '%1.d'.
(Но вообще, первый вариант со степенью 10 лучше, если там конечно цифры, а не числа больше 9.)

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 14:43 


26/09/17
341
Ну, можно бы догадаться, что я умею считать больше, чем до 9.))
Я вот что не могу понять - почему вот так склейка выполняется:
Используется синтаксис Matlab M
num2str([345 7740088], '%d')

А при перестановке тех же самых аргументов - нет:
Используется синтаксис Matlab M
num2str([7740088 345], '%d')

Подскажите?

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 15:22 
Заслуженный участник


18/09/21
1756
У меня в Octave и так, и так работает.
Скиньте сюда, что выдаёт Matlab, может яснее станет.

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 15:29 


26/09/17
341
Используется синтаксис Matlab M
>> num2str([7740088 345], '%d')

ans =

    '7740088    345'
 
У Вас по-другому? Если да - скопируйте строчку своего кода, плиз - вдруг Вы используете другой синтаксис!)

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 17:54 
Заслуженный участник


18/09/21
1756
В Octave:
Используется синтаксис Matlab M
>> num2str([7740088 345], '%d')
ans = 7740088345

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 17:55 


26/09/17
341
чудеса в решете какие-то - у меня не склеивает((
может кто-то у себя повторить? неужели только у меня "кривой" Матлаб?

ага, не обратил внимание, что Вы используете Octave...
блин, что же делать?((

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 18:23 
Заслуженный участник


18/09/21
1756
Такой хак делайте:
Используется синтаксис Matlab M
strrep(num2str([7740088 345], '%d'), ' ', '')

И так должно было работать, но что-то этот новый Matlab по другому теперь это делает.

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 18:33 


26/09/17
341
Ура! Отличный взлом!
Используется синтаксис Matlab M
>> strrep(num2str([7740088 345], '%d'), ' ', '')

ans =

    '7740088345'

>> strrep(num2str([345 7740088], '%d'), ' ', '')

ans =

    '3457740088'
 
Спасибо!

-- 13.01.2024, 20:14 --

zykov в сообщении #1625787 писал(а):
Такой хак делайте:
Используется синтаксис Matlab M
strrep(num2str([7740088 345], '%d'), ' ', '')

И так должно было работать, но что-то этот новый Matlab по другому теперь это делает.

Реализовал с Вашей помощью нужную мне функцию:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
function [res] = sumWords(A,B)
if any(isnan(A)) || any(isnan(B))
    res=nan;
    return
elseif all(A==0)
    res=B;
    return
elseif all(B==0)
    res=A;
    return
end
if all(A>0) || all(A<0)
    if all(B>0) || all(B<0)        
        if all(A>0) && all(B<0) || all(A<0) && all(B>0)  
            if isequal(abs(A),abs(B))
                res=zeros(1,length(A));
            else
                res=nan;
            end
        else
            temp=str2num(strrep(num2str([A(end) B(1)], '%d'), ' ', ''));
            if length(A)==1 || length(B)==1
                res=temp;
            else
                res=sym([A(1:end-1) temp  B(2:end)]);
            end
        end
    else
        error 'Each argument must contain only positive elements, or only negative elements, or only zeros.'
    end
else
    error 'Each argument must contain only positive elements, or only negative elements, or only zeros.'
end

Она работает корректно, но для только на небольших целых. Например, для больших аргументов получаем:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> A
 
ans =
 
[ 345  577860808979686845212233454756554348078617853952]
 
>> B
 
ans =
 
[ 7740088 13]
 
>> sumWords(A,B)
 
ans =
 
[ 345, Inf, 13]

Если сразу использовать sym (для входных аргументов), то предложенная Вами конструкция "ломается":
Используется синтаксис Matlab M
>> sumWords(A,B)
Error using num2str (line 45)
Input to num2str must be numeric.

Error in sumWords (line 22)
            temp=str2num(strrep(num2str([A(end) B(1)], '%d'), ' ', ''));

Помогите "добить", плиз!)

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 19:40 


26/09/17
341
Вырезать пробел как то можно в строке символов? Не работал никогда со строками((

 Профиль  
                  
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 20:04 
Заслуженный участник


12/08/10
1677
maximkarimov в сообщении #1625794 писал(а):
Вырезать пробел как то можно в строке символов?

Дак функция заменить strrep(S, ' ', '') как раз заменяет пробелы на пустые строки.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group