Arithmetical operators +,-,*,/,%
are defined elementwise
between array expressions, as well as broadcastwise if one argument is
a scalar. For example if x and y and z are arrays, and a is a scalar,
z=x+a*y => for (i=0; i<idx.size(); i++) z[i]=x[i]+a*y[i];
Indexing operators [] can either take a single integer argument, which refers to a single array or expression element, or it can take an integer array expression, which performs vector indexing. So
y=x[idx]; => for (i=0; i<idx.size(); i++) y[i] = x[idx[i]]; y[idx]=x; => for (i=0; i<idx.size(); i++) y[idx[i] = x[i];
Comparison operators <
, >
etc, and logical operators
&&
, ||
are also defined in elementwise and broadcast versions.
operator<<(expression1,expression2)
is a concatenation
operator, appending the elements of expression2 to the end of the
elements of expression1.
Compound assignment variants also exist:
x+=y; => x=x+y; x*=y; => x=x*y; ... x<<=y; => x=x<<y;