Numpy compatibility
===================
.. toctree::
:maxdepth: 1
Speasy is compatible with `numpy `_ and uses it internally to perform various operations. You can also pass Speasy variables to most numpy functions.
Arithmetic operations
---------------------
For example, you can perform arithmetic operations on Speasy variables:
>>> import speasy as spz
>>> ace_mag = spz.get_data('amda/imf', "2016-6-2", "2016-6-5")
>>> mag_divided_offset = ace_mag / 3 + 50
>>> type(mag_divided_offset)
Numpy functions
---------------
You can also use numpy functions on Speasy variables, depending on the function, the result will be a Speasy variable or a scalar value:
In the following example, np.mean and np.std return scalar values:
>>> import speasy as spz
>>> import numpy as np
>>> ace_mag = spz.get_data('amda/imf', "2016-6-2", "2016-6-5")
>>> mag_divided_offset = ace_mag / 3 + 50
>>> np.mean(ace_mag) - np.mean(mag_divided_offset)
np.float32(-49.76359)
>>> np.std(ace_mag) / np.std(mag_divided_offset)
np.float32(3.0)
In the following example, np.linalg.norm returns a Speasy variable with the same number of rows as the input variable:
>>> import speasy as spz
>>> import numpy as np
>>> ace_mag = spz.get_data('amda/imf', "2016-6-2", "2016-6-5")
>>> ace_mag_total = np.linalg.norm(ace_mag, axis=1)
>>> type(ace_mag_total)
>>> ace_mag.shape
(16200, 3)
>>> ace_mag_total.shape
(16200, 1)
Indexing
--------
Speasy variables support several indexing methods, including boolean indexing:
>>> import speasy as spz
>>> ace_mag = spz.get_data('amda/imf', "2016-6-2", "2016-6-5")
>>> ace_mag[ace_mag > 0]
>>> ace_mag[ace_mag > 0].shape, ace_mag.shape
((1157, 3), (16200, 3))
You can also use integer indexing as with :meth:`numpy.where(...) `:
>>> import numpy as np
>>> import speasy as spz
>>> ace_mag = spz.get_data('amda/imf', "2016-6-2", "2016-6-5")
>>> ace_mag[np.where(ace_mag>0)]
>>> ace_mag[np.where(ace_mag>0)].shape, ace_mag.shape
((1157, 3), (16200, 3))