bsxfun

Бинарное одноэлементное расширение функционирует для gpuArray

Синтаксис

Описание

пример

Примечание

  • Функция arrayfun предложения улучшили функциональность по сравнению с bsxfunarrayfun рекомендуется.

  • Эта функция ведет себя так же к MATLAB® функция bsxfun, за исключением того, что оценка функции происходит на графическом процессоре, не на центральном процессоре. Любые необходимые данные не уже на графическом процессоре перемещены в память графического процессора. Функция MATLAB передала в для оценки, скомпилирован и затем выполнен на графическом процессоре. Все выходные аргументы возвращены как gpuArray объекты. Можно получить gpuArray данные с помощью gather функция.

C = bsxfun(FUN,A,B) применяет поэлементно бинарную операцию, заданную FUN к массивам A и B, с одноэлементным включенным расширением.

Примеры

свернуть все

Используйте bsxfun с матрицей, чтобы вычесть среднее значение каждого столбца от всех элементов в том столбце. Затем нормируйте на стандартное отклонение каждого столбца.

A = rand(4,'gpuArray');
B = bsxfun(@minus,A,mean(A));
C = bsxfun(@rdivide,B,std(B))

Можно использовать bsxfun выполнять функцию для различных комбинаций входных параметров.

A = rand(4,'gpuArray');
B = bsxfun(@minus,A,mean(A));
C = bsxfun(@rdivide,B,std(B))
C =

   -1.2957   -1.1587   -0.8727    0.2132
   -0.2071    0.9960    0.3272   -1.2763
    0.4786    0.6523   -0.7228    1.1482
    1.0243   -0.4896    1.2684   -0.0851

Создайте указатель на функцию, который представляет функциональный f (a, b) = 1 - a e-b. Используйте bsxfun применять функцию к векторам a и bbsxfun одноэлементное расширение использования, чтобы расширить векторы в матрицы и выполняет функцию со всеми сочетаниями входных переменных.

a = gpuArray(1:7);
b = gpuArray(pi*[0 1/4 1/2 3/4 1 5/4 6/4 7/4 2]).';
fun = @(a,b) 1 - a.*exp(-b);
c = bsxfun(fun,a,b)
c =

         0   -1.0000   -2.0000   -3.0000   -4.0000   -5.0000   -6.0000
    0.5441    0.0881   -0.3678   -0.8238   -1.2797   -1.7356   -2.1916
    0.7921    0.5842    0.3764    0.1685   -0.0394   -0.2473   -0.4552
    0.9052    0.8104    0.7157    0.6209    0.5261    0.4313    0.3365
    0.9568    0.9136    0.8704    0.8271    0.7839    0.7407    0.6975
    0.9803    0.9606    0.9409    0.9212    0.9015    0.8818    0.8621
    0.9910    0.9820    0.9731    0.9641    0.9551    0.9461    0.9371
    0.9959    0.9918    0.9877    0.9836    0.9795    0.9754    0.9713
    0.9981    0.9963    0.9944    0.9925    0.9907    0.9888    0.9869

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

свернуть все

Функция, чтобы примениться к элементам входных массивов в виде указателя на функцию. FUN должен быть указатель на поддерживаемую поэлементную функцию или поэлементную функцию, написанную в языке MATLAB, который использует поддерживаемые функции и синтаксис. Fun должен возвратить скалярные значения. Для каждого выходного аргумента, FUN должны возвращаемые значения того же класса каждый раз, когда это называется.

FUN должен быть указатель на функцию, которая написана в языке MATLAB. Вы не можете задать FUN как указатель на MEX-функцию.

FUN может содержать следующие встроенные функции MATLAB и операторы.

abs
and
acos
acosh
acot
acoth
acsc
acsch
asec
asech
asin
asinh
atan
atan2
atanh
beta
betaln
bitand
bitcmp
bitget
bitor
bitset
bitshift
bitxor
cast
ceil
complex
conj
cos
cosh
cot
coth
csc
csch
double
eps
eq
erf
erfc
erfcinv
erfcx
erfinv
exp
expm1
false
fix
floor
gamma
gammaln
ge
gt
hypot
imag
Inf
int8
int16
int32
int64
intmax
intmin
isfinite
isinf
isnan
ldivide
le
log
log2
log10
log1p
logical
lt
max
min
minus
mod
NaN
ne
not
ones
or
pi
plus
pow2
power
rand
randi
randn
rdivide
real
reallog
realmax
realmin
realpow
realsqrt
rem
round
sec
sech
sign
sin
single
sinh
sqrt
tan
tanh
times
true
uint8
uint16
uint32
uint64
xor
zeros

+
-
.*
./
.\
.^
==
~=
<
<=
>
>=
&
|
~
&&
||

Скалярные версии расширения следующего:

*
/
\
^
Команды ветвления:
break
continue
else
elseif
for
if
return
while

Функции, которые создают массивы (такие как InfNaNединицыrandrandirandn, и zeros) не поддерживайте спецификации размера как входные параметры. Вместо этого размер сгенерированного массива определяется размером входных переменных к вашим функциям. Достаточно элементов массива сгенерировано, чтобы удовлетворить потребностям ваших переменных ввода или вывода. Можно задать тип данных с помощью и класса и "like" синтаксисы. Следующие примеры показывают поддерживаемые синтаксисы для функций создания массивов:

a = rand;
b = ones();
c = zeros("like", x);
d = Inf("single");
e = randi([0 9], "uint32");

Когда вы используете randrandi, и randn сгенерировать случайные числа в FUN, каждый элемент сгенерирован от различного подпотока. Для получения дополнительной информации о генерации случайных чисел на графическом процессоре, смотрите Потоки Случайных чисел на графическом процессоре.

Входные массивы в виде скаляров, векторов, матриц или многомерных массивов. Входные параметры A и B должен иметь совместимые размеры. Для получения дополнительной информации см. "Совместимые размеры массивов для основных операций". Каждый раз, когда размерность A или B одиночный элемент (равный одному), bsxfun фактически реплицирует массив по тому измерению, чтобы совпадать с другим массивом. В случае, где размерность A или B одиночный элемент, и соответствующая размерность в другом массиве является нулем, bsxfun фактически уменьшает одноэлементную размерность, чтобы обнулить.

По крайней мере одни из входных параметров должны быть gpuArray. Каждый массив, который хранится на памяти ЦП, преобразован в gpuArray, прежде чем функция будет выполнена. Если вы планируете выполнить несколько вызовов к bsxfun с тем же массивом более эффективно преобразовать тот массив в gpuArray.

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

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

свернуть все

Выходной массив, возвращенный как скаляр, вектор, матрица или многомерный массив, в зависимости от размеров A и BC возвращен как gpuArray.

Советы

  • В первый раз вы вызываете bsxfun чтобы запустить конкретную функцию на графическом процессоре, существует некоторое служебное время, чтобы настроить функцию для выполнения графического процессора. Последующие вызовы bsxfun с той же функцией может запуститься быстрее.

  • Неодноэлементные размерности входных массивов должны совпадать друг с другом. Другими словами, соответствующие размерности аргументов AB, и т.д., должно быть равно друг другу или равен одному. Каждый раз, когда размерность входного массива является одиночным элементом (равный 1), bsxfun одноэлементное расширение использования. Массив реплицирован по одноэлементному измерению, чтобы совпадать с самым большим из других массивов в той размерности. Когда размерность входного массива является одиночным элементом, и соответствующая размерность в другом массиве аргументов является нулем, bsxfun фактически уменьшает одноэлементную размерность к 0.

    Каждая размерность выходного массива C одного размера с самым большим из входных массивов в той размерности для ненулевого размера или нулем в противном случае. Следующий код показывает, как размерности размера 1 увеличены или вниз совпадать с размером соответствующей размерности в других аргументах.

    R1 = rand(2,5,4,'gpuArray');
    R2 = rand(2,1,4,3,'gpuArray');
    R = bsxfun(@plus,R1,R2);
    size(R)
    
      2     5     4     3
    R1 = rand(2,2,0,4,'gpuArray');
    R2 = rand(2,1,1,4,'gpuArray');
    R = bsxfun(@plus,R1,R2);
    size(R)
    
      2     2     0     4
    
  • Поскольку операции поддержаны bsxfun строго поэлементны, и каждый расчет каждого элемента выполняется независимо от других, определенные ограничения вводятся:

    • Массивы ввода и вывода не могут изменить форму или размер.

    • Функционирует, такие как rand не поддерживайте спецификации размера. Массивы случайных чисел имеют независимые потоки для каждого элемента.

  • Как bsxfun в MATLAB, матричной экспоненциальной степени, умножении и делении (^, *, /, \) выполните поэлементные вычисления только.

  • Операции, которые изменяют размер или форму массивов ввода или вывода (catизменение, и так далее), не поддерживаются.

  • Индексация только для чтения (subsref) и доступ к переменным родительской (внешней) функциональной рабочей области из вложенных функций поддерживается. Вы можете индексные переменные, которые существуют в функции перед оценкой на графическом процессоре. Присвоение или subsasgn индексация этих переменных из вложенной функции не поддерживается. Для примера поддерживаемого использования смотрите Операции Шаблона на графическом процессоре

  • Анонимные функции не имеют доступа к своей родительской функциональной рабочей области.

  • Перегрузка поддерживаемых функций не позволена.

  • Код не может вызвать скрипты.

  • Нет никакого ans переменная, чтобы содержать неприсвоенные результаты расчета. Убедитесь, что явным образом присвоили переменным результаты всех вычислений.

  • Следующие функции языка не поддерживаются: персистентные или глобальные переменные, parforSPMDSwitch, и try/catch.

  • Pcode-файлы не могут содержать вызов bsxfun с gpuArray данными.

Смотрите также

| | |

Представленный в R2012a