subsasgn

Преобразованное в нижний индекс присвоение

Синтаксис

Описание

пример

A = subsasgn(A,S,B) называется для синтаксиса A(i) = B, A{i} = B, или A.i = B когда A объект.

MATLAB® использует встроенное subsasgn функция, чтобы интерпретировать индексированные операторы присваивания:

  • A(i) = B присваивает значения B в элементы A заданный вектором индекса iB должен иметь то же число элементов как i или быть скалярным значением.

  • A(i,j) = B присваивает значения B в элементы прямоугольной субматрицы A заданный векторами индекса i и jB должен иметь length(i) строки и length(j) столбцы.

  • Двоеточие используется в качестве индекса, в качестве в A(i,:) = B или A(:,i) = B, указывает на целый столбец или строку.

  • Для многомерных массивов, A(i,j,k,…) = B присвоения B к указанным элементам AB должен быть length(i)- length(j)- length(k)- … или быть подвижным к тому размеру путем добавления или удаления одноэлементных размерностей.

Совет

Можно использовать присвоение фиксированной точки, например, A(:) = B, бросать значение с одним числовым типом в другой числовой тип. Этот преобразованный в нижний индекс оператор присваивания присваивает значение B в A при хранении числового типа A. Преобразованное в нижний индекс присвоение работает одинаково для целочисленных типов данных.

Примечание

Необходимо вызвать subsasgn с выходным аргументом. subsasgn не изменяет объект, используемый в операции индексации (первый аргумент). Необходимо присвоить выход, чтобы получить модифицированный объект.

Примеры

свернуть все

Для fi объекты a и b, существует различие между

a = b

и

a(:) = b.

В первом случае, a = b замены a с b в то время как a принимает значение, числовой тип и fimath объект сопоставлен с b. Во втором случае, a(:) = b присваивает значение b в a при хранении числового типа a. Можно использовать это, чтобы бросить значение с одним numerictype объект в другой numerictype объект.

Например, бросьте 16-битный номер в 8-битный номер.

a = fi(0, 1, 8, 7)
a = 
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7
b = fi(pi/4, 1, 16, 15)
b = 
    0.7854

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15
a(:) = b
a = 
    0.7891

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7

Задайте переменную acc эмулировать 40-битный аккумулятор DSP. Продукты и суммы в этом примере присвоены в аккумулятор с помощью синтаксиса acc(1)=.... Присвоение значений в аккумулятор похоже на хранение значения в регистре. Чтобы начаться, включите режим логгирования и задайте переменные. В этом примере, n число точек во входных данных x и выходные данные y, и t представляет время. Остающиеся переменные все заданы как fi объекты. Входные данные x высокочастотная синусоида, добавленная к низкочастотной синусоиде.

fipref('LoggingMode', 'on');
n = 100;
t = (0:n-1)/n;
x = fi(sin(2*pi*t) + 0.2*cos(2*pi*50*t));
b = fi([.5 .5]);
y = zeros(size(x),'like',x);
acc = fi(0.0, true, 40, 30);

Следующий цикл берет рабочее среднее значение входа x использование коэффициентов в b . Заметьте, что acc присвоен в acc(1)=... по сравнению с использованием acc=..., который перезаписал бы и изменил бы тип данных acc .

for k = 2:n
    acc(1) = b(1)*x(k);
    acc(1) = acc + b(2)*x(k-1);
    y(k) = acc;
end

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

plot(t,x,'x-',t,y,'o-')
legend('input data x','output data y')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent input data x, output data y.

Логарифмический отчет показывает минимальные и максимальные регистрируемые значения и области значений используемых переменных. Поскольку acc присвоен в, а не перезаписан, эти журналы отражают накопленные минимальные и максимальные значения.

logreport(x, y, b, acc)
                     minlog         maxlog     lowerbound     upperbound     noverflows    nunderflows
           x      -1.200012       1.197998             -2       1.999939              0              0
           y     -0.9990234      0.9990234             -2       1.999939              0              0
           b            0.5            0.5             -1      0.9999695              0              0
         acc     -0.9990234      0.9989929           -512            512              0              0

Отобразите acc проверять, что его тип данных не изменился.

acc
acc = 
   -0.0941

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 40
        FractionLength: 30

Сбросьте fipref возразите, чтобы восстановить его значения по умолчанию.

reset(fipref)

Входные параметры

свернуть все

Объект, используемый в индексации операции в виде скаляра, вектора или многомерного массива.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi
Поддержка комплексного числа: Да

Тип индексации и индексов в виде массива структур. S массив структур с двумя полями:

  • type вектор символов или строка, содержащая (), {}, или ., определение типа индекса.

  • subs массив ячеек, символьный массив или массив строк, содержащий фактические индексы.

Пример: синтаксис A(1:2,:) = B вызовы a = subsasgn(A,S,B) где S структура 1 на 1 с S.type = '()' и S.subs = {1:2, ':'}. Двоеточие, используемое в качестве скрипта, передается как ':'.

Типы данных: struct

Значение, присваиваемое в виде скаляра, вектора или многомерного массива.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi
Поддержка комплексного числа: Да

Выходные аргументы

свернуть все

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

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Представлено до R2006a