subsasgn

Назначение по подписке

Синтаксис

a(I) = b
a(I,J) = b
a(I,:) = b
a(:,I) = b
a(I,J,K,...) = b
a = subsasgn(a,S,b)

Описание

a(I) = b присваивает значения b в элементы a задается индексным вектором I. b должно иметь то же количество элементов, что и I или быть скалярным значением.

a(I,J) = b присваивает значения b в элементы прямоугольной подматрицы a задается индексом векторов I и J. b должно иметь LENGTH(I) строки и LENGTH(J) столбцы.

Двоеточие, используемое в качестве индекса, как в a(I,:) = b или a(:,I) = b указывает весь столбец или строку.

Для многомерных массивов, a(I,J,K,...) = b присваивает b к указанным элементам a. b должен быть length(I)-by- length(J)-by- length(K)-... или быть сдвинутым к этому размеру путем добавления или удаления синглтонных размерностей.

a = subsasgn(a,S,b) вызывается для синтаксиса a(i)=b, a{i}=b, или a.i=b когда a является объектом. S представляет собой массив структур со следующими полями:

  • type - Одно из следующего: '()', '{}', или '.' определение типа индекса

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

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

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

Примеры

свернуть все

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

a = b

и

a(:) = b

В первом случае a = b заменяет a с b в то время как a принимает значение, numerictype объект и fimath объект, сопоставленный с b. Во втором случае a(:) = b присваивает значение b в a при сохранении numerictype объект 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 = fi(zeros(size(x)), numerictype(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. The axes 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)

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

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

.

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

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