Arithmetic Operators#
Addition#
You can add to each signal sample the corresponding element in another
Trace or Iterable, or an int or float number
with the + operator or by calling the method add().
A new Trace instance labeled with the performed transformation
'add' or 'radd' is returned.
>>> # add a trace to the samples
>>> Trace('Signal1', [1, 2, 3]) + Trace('Signal2', [-2, -3, -4])
Trace(label='Signal1:add', samples=[-1, -1, -1])
>>> Trace('Signal1', [1, 2, 3]).add(Trace('Signal2', [-2, -3, -4]))
Trace(label='Signal1:add', samples=[-1, -1, -1])
>>> # add an iterable to the samples
>>> Trace('Signal', [1, 2, 3]) + [-2, -3, -4]
Trace(label='Signal:add', samples=[-1, -1, -1])
>>> Trace('Signal', [1, 2, 3]).add([-2, -3, -4])
Trace(label='Signal:add', samples=[-1, -1, -1])
>>> # add to an iterable the samples
>>> [1, 2, 3] + Trace('Signal', [-2, -3, -4])
Trace(label='Signal:radd', samples=[-1, -1, -1])
>>> # add a number to the samples
>>> Trace('Signal', [1, 2, 3]) + 1
Trace(label='Signal:add', samples=[2, 3, 4])
>>> Trace('Signal', [1, 2, 3]).add(1)
Trace(label='Signal:add', samples=[2, 3, 4])
>>> # add to a number the samples
>>> 1 + Trace('Signal', [1, 2, 3])
Trace(label='Signal:radd', samples=[2, 3, 4])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)
Subtraction#
You can subtract from each signal sample the corresponding element in another
Trace or Iterable, or an int or float number
with the - operator or by calling the method sub().
A new Trace instance labeled with the performed transformation
'sub' is returned.
>>> # subtract a trace from the samples
>>> Trace('Signal1', [1, 2, 3]) - Trace('Signal2', [2, 3, 4])
Trace(label='Signal1:sub', samples=[-1, -1, -1])
>>> Trace('Signal1', [1, 2, 3]).sub(Trace('Signal2', [2, 3, 4]))
Trace(label='Signal1:sub', samples=[-1, -1, -1])
>>> # subtract an iterable from the samples
>>> Trace('Signal', [1, 2, 3]) - [2, 3, 4]
Trace(label='Signal:sub', samples=[-1, -1, -1])
>>> Trace('Signal', [1, 2, 3]).sub([2, 3, 4])
Trace(label='Signal:sub', samples=[-1, -1, -1])
>>> # subtract a number from the samples
>>> Trace('Signal', [1, 2, 3]) - 1
Trace(label='Signal:sub', samples=[0, 1, 2])
>>> Trace('Signal', [1, 2, 3]).sub(1)
Trace(label='Signal:sub', samples=[0, 1, 2])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)
You can subtract each signal sample from the corresponding element in an
Iterable, or an int or float number with the -
operator.
A new Trace instance labeled with the performed transformation
'rsub' is returned.
>>> # subtract from an iterable the samples
>>> [1, 2, 3] - Trace('Signal', [2, 3, 4])
Trace(label='Signal:rsub', samples=[-1, -1, -1])
>>> # subtract from a number the samples
>>> 1 - Trace('Signal', [1, 2, 3])
Trace(label='Signal:rsub', samples=[0, -1, -2])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)
Multiplication#
You can multiply each signal sample with the corresponding element in another
Trace or Iterable, or an int or float number
with the * operator or by calling the method mul().
A new Trace instance labeled with the performed transformation
'mul' or 'rmul' is returned.
>>> # multiply the samples with a trace
>>> Trace('Signal1', [1, 2, 3]) * Trace('Signal2', [2, 3, 4])
Trace(label='Signal1:mul', samples=[2, 6, 12])
>>> Trace('Signal1', [1, 2, 3]).mul(Trace('Signal2', [2, 3, 4]))
Trace(label='Signal1:mul', samples=[2, 6, 12])
>>> # multiply the samples with an iterable
>>> Trace('Signal', [1, 2, 3]) * [2, 3, 4]
Trace(label='Signal:mul', samples=[2, 6, 12])
>>> Trace('Signal', [1, 2, 3]).mul([2, 3, 4])
Trace(label='Signal:mul', samples=[2, 6, 12])
>>> # multiply an iterable with the samples
>>> [1, 2, 3] * Trace('Signal', [2, 3, 4])
Trace(label='Signal:rmul', samples=[2, 6, 12])
>>> # multiply the samples with a number
>>> Trace('Signal', [1, 2, 3]) * 2
Trace(label='Signal:mul', samples=[2, 4, 6])
>>> Trace('Signal', [1, 2, 3]).mul(2)
Trace(label='Signal:mul', samples=[2, 4, 6])
>>> # multiply a number with the samples
>>> 2 * Trace('Signal', [1, 2, 3])
Trace(label='Signal:rmul', samples=[2, 4, 6])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)
Division#
You can divide each signal sample by the corresponding element in another
Trace or Iterable, or an int or float number
with the / operator or by calling the method div().
A new Trace instance labeled with the performed transformation
'div' is returned.
>>> # divided the samples by a trace
>>> Trace('Signal1', [3, 6, 9]) / Trace('Signal2', [2, 4, 6])
Trace(label='Signal1:div', samples=[1.5, 1.5, 1.5])
>>> Trace('Signal1', [3, 6, 9]).div(Trace('Signal2', [2, 4, 6]))
Trace(label='Signal1:div', samples=[1.5, 1.5, 1.5])
>>> # divide the samples by an iterable
>>> Trace('Signal', [3, 6, 9]) / [2, 4, 6]
Trace(label='Signal:div', samples=[1.5, 1.5, 1.5])
>>> Trace('Signal', [3, 6, 9]).div([2, 4, 6])
Trace(label='Signal:div', samples=[1.5, 1.5, 1.5])
>>> # divide the samples by a number
>>> Trace('Signal', [3, 6, 9]) / 2
Trace(label='Signal:div', samples=[1.5, 3.0, 4.5])
>>> Trace('Signal', [3, 6, 9]).div(2)
Trace(label='Signal:div', samples=[1.5, 3.0, 4.5])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
You can divide the corresponding element in an Iterable, or an int
or float number by each signal sample with the / operator.
A new Trace instance labeled with the performed transformation
'rdiv' is returned.
>>> # divide an iterable by the samples
>>> [3, 6, 9] / Trace('Signal', [2, 4, 6])
Trace(label='Signal:rdiv', samples=[1.5, 1.5, 1.5])
>>> # divide a number by the samples
>>> 4.5 / Trace('Signal', [3, 6, 9])
Trace(label='Signal:rdiv', samples=[1.5, 0.75, 0.5])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
Floor Division#
You can integer divide each signal sample by the corresponding element in
another Trace or Iterable, or an int or float
number with the // operator or by calling the method:meth:~Trace.floordiv.
A new Trace instance labeled with the performed transformation
'floordiv' is returned.
>>> # integer divide the samples by a trace
>>> Trace('Signal1', [3, 6, 9]) // Trace('Signal2', [2, 4, 6])
Trace(label='Signal1:floordiv', samples=[1, 1, 1])
>>> Trace('Signal1', [3, 6, 9]).floordiv(Trace('Signal2', [2, 4, 6]))
Trace(label='Signal1:floordiv', samples=[1, 1, 1])
>>> # integer divide the samples by an iterable
>>> Trace('Signal', [3, 6, 9]) // [2, 4, 6]
Trace(label='Signal:floordiv', samples=[1, 1, 1])
>>> Trace('Signal', [3, 6, 9]).floordiv([2, 4, 6])
Trace(label='Signal:floordiv', samples=[1, 1, 1])
>>> # integer divide the samples by a number
>>> Trace('Signal', [3, 6, 9]) // 2
Trace(label='Signal:floordiv', samples=[1, 3, 4])
>>> Trace('Signal', [3, 6, 9]).floordiv(2)
Trace(label='Signal:floordiv', samples=[1, 3, 4])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
You can integer divide the corresponding element in an Iterable, or an
int or float number by each signal sample with the //
operator.
A new Trace instance labeled with the performed transformation
'rfloordiv' is returned.
>>> # integer divide an iterable by the samples
>>> [3, 6, 9] // Trace('Signal', [2, 4, 6])
Trace(label='Signal:rfloordiv', samples=[1, 1, 1])
>>> # integer divide a number by the samples
>>> 4.5 // Trace('Signal', [3, 6, 9])
Trace(label='Signal:rfloordiv', samples=[1.0, 0.0, 0.0])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
Modulo#
You can modulo divide each signal sample by the corresponding element in
another Trace or Iterable, or an int or float
number with the % operator or by calling the method mod().
A new Trace instance labeled with the performed transformation
'mod' is returned.
>>> # modulo divide the samples by a trace
>>> Trace('Signal1', [-3, 6, 9.5]) % Trace('Signal2', [2, 4, -6])
Trace(label='Signal1:mod', samples=[1, 2, -2.5])
>>> Trace('Signal1', [-3, 6, 9.5]).mod(Trace('Signal2', [2, 4, -6]))
Trace(label='Signal1:mod', samples=[1, 2, -2.5])
>>> # modulo divide the samples by an iterable
>>> Trace('Signal', [-3, 6, 9.5]) % [2, 4, -6]
Trace(label='Signal:mod', samples=[1, 2, -2.5])
>>> Trace('Signal', [-3, 6, 9.5]).mod([2, 4, -6])
Trace(label='Signal:mod', samples=[1, 2, -2.5])
>>> # modulo divide the samples by a number
>>> Trace('Signal', [-3, 6, 9.5]) % 2
Trace(label='Signal:mod', samples=[1, 0, 1.5])
>>> Trace('Signal', [-3, 6, 9.5]).mod(2)
Trace(label='Signal:mod', samples=[1, 0, 1.5])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
You can modulo divide the corresponding element in an Iterable, or an
int or float number by each signal sample with the %
operator.
A new Trace instance labeled with the performed transformation
'rmod' is returned.
>>> # modulo divide an iterable by the samples
>>> [3, 6, 9] % Trace('Signal', [2, 4, 6])
Trace(label='Signal:rmod', samples=[1, 2, 3])
>>> # modulo divide a number by the samples
>>> 4.5 % Trace('Signal', [3, 6, 9])
Trace(label='Signal:rmod', samples=[1.5, 4.5, 4.5])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
Floating-Point Modulo#
You can modulo divide each signal sample by the corresponding element in
another Trace or Iterable, or an int or float
number by calling the method fmod().
A new Trace instance labeled with the performed transformation
'mod' is returned.
>>> # modulo divide the samples by a trace
>>> Trace('Signal1', [-3, 6, 9.5]).fmod(Trace('Signal2', [2, 4, -6]))
Trace(label='Signal1:fmod', samples=[-1.0, 2.0, 3.5])
>>> # modulo divide the samples by an iterable
>>> Trace('Signal', [-3, 6, 9.5]).fmod([2, 4, -6])
Trace(label='Signal:fmod', samples=[-1.0, 2.0, 3.5])
>>> # modulo divide the samples by a number
>>> Trace('Signal', [-3, 6, 9.5]).fmod(-2)
Trace(label='Signal:fmod', samples=[-1.0, 0.0, 1.5])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
Note
Zero-divisions between the samples are resolved by returning zero for the samples where the divisor is zero!
(Source code, html)
Exponentiation#
You can raise each signal sample to the power of the corresponding element
in another Trace or Iterable, or an int or float
number with the ** operator or by calling the method pow().
A new Trace instance labeled with the performed transformation
'pow' is returned.
>>> # raise the samples to the power of a trace
>>> Trace('Signal1', [1, 0, -1]) ** Trace('Signal2', [-2, 0, 2])
Trace(label='Signal1:pow', samples=[1.0, 1, 1])
>>> Trace('Signal1', [1, 0, -1]).pow(Trace('Signal2', [-2, 0, 2]))
Trace(label='Signal1:pow', samples=[1.0, 1, 1])
>>> # raise the samples to the power of an iterable
>>> Trace('Signal', [1, 0, -1]) ** [-2, 0, 2]
Trace(label='Signal:pow', samples=[1.0, 1, 1])
>>> Trace('Signal', [1, 0, -1]).pow([-2, 0, 2])
Trace(label='Signal:pow', samples=[1.0, 1, 1])
>>> # raise the samples to the power of a number
>>> Trace('Signal', [1, 0, 1]) ** 2
Trace(label='Signal:pow', samples=[1, 0, 1])
>>> Trace('Signal', [1, 0, 1]).pow(2)
Trace(label='Signal:pow', samples=[1, 0, 1])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)
You can raise the corresponding element in an Iterable, or an int
or float number to the power of each signal sample with the **
operator.
A new Trace instance labeled with the performed transformation
'rpow' is returned.
>>> # raise an iterable to the power of the samples
>>> [1, 0, -1] ** Trace('Signal', [-2, 0, 2])
Trace(label='Signal:rpow', samples=[1.0, 1, 1])
>>> # raise a number to the power of the samples
>>> (-1) ** Trace('Signal', [-2, 0, 2])
Trace(label='Signal:rpow', samples=[1.0, 1, 1])
Note
An iterable should have at least the same length as the signal
samples, otherwise only a subset of the signal
samples is returned!
(Source code, html)