2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 08:13 
Требуется к первому числу "приклеить" второе, например: на входе вектор [3 1], на выходе число 31.
Есть ли такая возможность в среде Матлаб?

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

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 10:43 
Вот тут есть пара вариантов
https://www.mathworks.com/matlabcentral ... ype-double

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 11:46 
Используется синтаксис Matlab M
[3 1]*10.^[1:-1:0]'
str2num(num2str([3 1], "%1d"))

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 14:07 
Уважаемый 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 
У меня без точки '%1.d'.
(Но вообще, первый вариант со степенью 10 лучше, если там конечно цифры, а не числа больше 9.)

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 14:43 
Ну, можно бы догадаться, что я умею считать больше, чем до 9.))
Я вот что не могу понять - почему вот так склейка выполняется:
Используется синтаксис Matlab M
num2str([345 7740088], '%d')

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

Подскажите?

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 15:22 
У меня в Octave и так, и так работает.
Скиньте сюда, что выдаёт Matlab, может яснее станет.

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 15:29 
Используется синтаксис Matlab M
>> num2str([7740088 345], '%d')

ans =

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

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 17:54 
В Octave:
Используется синтаксис Matlab M
>> num2str([7740088 345], '%d')
ans = 7740088345

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 17:55 
чудеса в решете какие-то - у меня не склеивает((
может кто-то у себя повторить? неужели только у меня "кривой" Матлаб?

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

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 18:23 
Такой хак делайте:
Используется синтаксис Matlab M
strrep(num2str([7740088 345], '%d'), ' ', '')

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

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 18:33 
Ура! Отличный взлом!
Используется синтаксис 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 
Вырезать пробел как то можно в строке символов? Не работал никогда со строками((

 
 
 
 Re: Матлаб: есть ли простой способ конкатенации разрядов?
Сообщение13.01.2024, 20:04 
maximkarimov в сообщении #1625794 писал(а):
Вырезать пробел как то можно в строке символов?

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

 
 
 [ Сообщений: 28 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group