dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2).
Lambert Equal Area Projection from polar sphere to plane
Return positions in (y1,y2) plane corresponding to the points
with polar coordinates (theta, phi) on the unit sphere, under the
Lambert Equal Area Projection mapping (see Mardia and Jupp (2000),
Directional Statistics, p.
Lambert Equal Area Projection from cartesian vector to plane
Return positions in \((y_1,y_2)\) plane corresponding to the
directions of the vectors with cartesian coordinates xyz under the
Lambert Equal Area Projection mapping (see Mardia and Jupp (2000),
Directional Statistics, p.
This function gives the unique rounded b-values of the data
dipy.core.gradients.unique_bvals is deprecated, Please use dipy.core.gradients.unique_bvals_magnitude instead
* deprecated from version: 1.2
* Raises <class 'dipy.utils.deprecator.ExpiredDeprecationError'> as of version: 1.4
Parameters
----------
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude that the bvalues have to differ to be
considered an unique b-value.
"This function rounds the b-values
Parameters
----------
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude to round the b-values.
This function gives the unique rounded b-values of the data
Parameters
----------
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude that the bvalues have to differ to be
considered an unique b-value.
Copyright (c) 2006-2011, NIPY Developers
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
Neither the name of the NIPY Developers nor the names of any
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
“AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Utilities to support special Python descriptors [1,2], in particular the use of
a useful pattern for properties we call ‘one time properties’. These are
object attributes which are declared as properties, but become regular
attributes once they’ve been read the first time. They can thus be evaluated
later in the object’s life cycle, but once evaluated they become normal, static
attributes with no function call overhead on access or any other constraints.
A special ResetMixin class is provided to add a .reset() method to users who
may want to have their objects capable of resetting these computed properties
to their ‘untriggered’ state.
Provide a sklearn-like uniform interface to algorithms that solve problems
of the form: \(y = Ax\) for \(x\)
Sub-classes of SKLearnLinearSolver should provide a 'fit' method that have
the following signature: SKLearnLinearSolver.fit(X, y), which would set
an attribute SKLearnLinearSolver.coef_, with the shape (X.shape[1],),
such that an estimate of y can be calculated as:
y_hat = np.dot(X, SKLearnLinearSolver.coef_.T)
Checks the euler characteristic of a sphere
If \(f\) = number of faces, \(e\) = number_of_edges and \(v\) = number of
vertices, the Euler formula says \(f-e+v = 2\) for a mesh on a sphere.
Principal direction and confidence ellipse
Implements equations in section 6.3.1(ii) of Fisher, Lewis and
Embleton, supplemented by equations in section 3.2.5.
Create a unit sphere by subdividing all triangles of an octahedron
recursively.
The unit sphere has a radius of 1, which also means that all points in this
sphere (assumed to have centre at [0, 0, 0]) have an absolute value (modulus)
of 1. Another feature of the unit sphere is that the unit normals of this
sphere are exactly the same as the vertices.
This recursive method will avoid the common problem of the polar singularity,
produced by 2d (lon-lat) parameterization methods.
This is the standard physics convention where theta is the
inclination (polar) angle, and phi is the azimuth angle.
Imagine a sphere with center (0,0,0). Orient it with the z axis
running south-north, the y axis running west-east and the x axis
from posterior to anterior. theta (the inclination angle) is the
angle to rotate from the z-axis (the zenith) around the y-axis,
towards the x axis. Thus the rotation is counter-clockwise from the
point of view of positive y. phi (azimuth) gives the angle of
rotation around the z-axis towards the y axis. The rotation is
counter-clockwise from the point of view of positive z.
Equivalently, given a point P on the sphere, with coordinates x, y,
z, theta is the angle between P and the z-axis, and phi is
the angle between the projection of P onto the XY plane, and the X
axis.
Geographical nomenclature designates theta as ‘co-latitude’, and phi
as ‘longitude’
for excellent discussion of the many different conventions
possible. Here we use the physics conventions, used in the
wikipedia page.
Derivations of the formulae are simple. Consider a vector x, y, z of
length r (norm of x, y, z). The inclination angle (theta) can be
found from: cos(theta) == z / r -> z == r * cos(theta). This gives
the hypotenuse of the projection onto the XY plane, which we will
call Q. Q == r*sin(theta). Now x / Q == cos(phi) -> x == r *
sin(theta) * cos(phi) and so on.
We have deliberately named this function sphere2cart rather than
sph2cart to distinguish it from the Matlab function of that
name, because the Matlab function uses an unusual convention for the
angles that we did not want to replicate. The Matlab function is
trivial to implement with the formulae given in the Matlab help.
Return angles for Cartesian 3D coordinates x, y, and z
See doc for sphere2cart for angle conventions and derivation
of the formulae.
\(0\le\theta\mathrm{(theta)}\le\pi\) and \(-\pi\le\phi\mathrm{(phi)}\le\pi\)
Parameters
———-
x : array_like
x coordinate in Cartesian space
y : array_like
y coordinate in Cartesian space
z : array_like
z coordinate
Returns
——-
r : array
radius
theta : array
inclination (polar) angle
phi : array
azimuth angle
where N is the number of points and R is the number of
coordinates defining a point (R==3 for 3D)
pts2(N,R) or (R,) array_like
where N is the number of points and R is the number of
coordinates defining a point (R==3 for 3D). It should be
possible to broadcast pts1 against pts2
radiusNone or float, optional
Radius of sphere. Default is to work out radius from mean of the
length of each point vector
check_radiusbool, optional
If True, check if the points are on the sphere surface - i.e
check if the vector lengths in pts1 and pts2 are close to
radius. Default is True.
If either of pts1 or pts2 is 2D, then we take the first
dimension to index points, and the second indexes coordinate. More
generally, we take the last dimension to be the coordinate
dimension.
where N is the number of points and R is the number of
coordinates defining a point (R==3 for 3D)
pts2(N,R) or (R,) array_like
where N is the number of points and R is the number of
coordinates defining a point (R==3 for 3D). It should be
possible to broadcast pts1 against pts2
Lambert Equal Area Projection from polar sphere to plane
Return positions in (y1,y2) plane corresponding to the points
with polar coordinates (theta, phi) on the unit sphere, under the
Lambert Equal Area Projection mapping (see Mardia and Jupp (2000),
Directional Statistics, p. 161).
See doc for sphere2cart for angle conventions
- \(0 \le \theta \le \pi\) and \(0 \le \phi \le 2 \pi\)
- \(|(y_1,y_2)| \le 2\)
The Lambert EAP maps the upper hemisphere to the planar disc of radius 1
and the lower hemisphere to the planar annulus between radii 1 and 2,
and vice versa.
Parameters
———-
theta : array_like
theta spherical coordinates
phi : array_like
phi spherical coordinates
Returns
——-
y : (N,2) array
planar coordinates of points following mapping by Lambert’s EAP.
dipy.core.geometry.lambert_equal_area_projection_cart(x, y, z)#
Lambert Equal Area Projection from cartesian vector to plane
Return positions in \((y_1,y_2)\) plane corresponding to the
directions of the vectors with cartesian coordinates xyz under the
Lambert Equal Area Projection mapping (see Mardia and Jupp (2000),
Directional Statistics, p. 161).
The Lambert EAP maps the upper hemisphere to the planar disc of radius 1
and the lower hemisphere to the planar annulus between radii 1 and 2,
The Lambert EAP maps the upper hemisphere to the planar disc of radius 1
and the lower hemisphere to the planar annulus between radii 1 and 2.
and vice versa.
See doc for sphere2cart for angle conventions
Parameters
———-
x : array_like
x coordinate in Cartesian space
y : array_like
y coordinate in Cartesian space
z : array_like
z coordinate
Returns
——-
y : (N,2) array
planar coordinates of points following mapping by Lambert’s EAP.
a, b and c are 3-dimensional vectors which are the vertices of a
triangle. The function returns the circumradius of the triangle, i.e
the radius of the smallest circle that can contain the triangle. In
the degenerate case when the 3 points are collinear it returns
half the distance between the furthest apart points.
u, v being unit 3d vectors return a 3x3 rotation matrix R than aligns u to
v.
In general there are many rotations that will map u to v. If S is any
rotation using v as an axis then R.S will also map u to v since (S.R)u =
S(Ru) = Sv = v. The rotation R returned by vec2vec_rotmat leaves fixed the
perpendicular to the plane spanned by u and v.
Array containing the three cartesian coordinates of vector v
numint, optional
Number of perpendicular directions to generate
halfbool, optional
If half is True, perpendicular directions are sampled on half of the
unit circumference perpendicular to v, otherwive perpendicular
directions are sampled on the full circumference. Default of half is
False
Perpendicular directions are estimated using the following two step
procedure:
1) the perpendicular directions are first sampled in a unit
circumference parallel to the plane normal to the x-axis.
2) Samples are then rotated and aligned to the plane normal to vector
v. The rotational matrix for this rotation is constructed as reference
frame basis which axis are the following:
The first axis is vector v
The second axis is defined as the normalized vector given by the
cross product between vector v and the unit vector aligned to the
x-axis
- The third axis is defined as the cross product between the
previous computed vector and vector v.
Following this two steps, coordinates of the final perpendicular directions
are given as:
This procedure has a singularity when vector v is aligned to the x-axis. To
solve this singularity, perpendicular directions in procedure’s step 1 are
defined in the plane normal to y-axis and the second axis of the rotated
frame of reference is computed as the normalized vector given by the cross
product between vector v and the unit vector aligned to the y-axis.
Following this, the coordinates of the perpendicular directions are given
as:
left [ -frac{left (v_{x}v_{y}sin(a_{i})+v_{z}cos(a_{i}) right )}
{sqrt{{v_{x}}^{2}+{v_{z}}^{2}}}
; , ;
sin(a_{i}) sqrt{{v_{x}}^{2}+{v_{z}}^{2}}
; , ;
frac{v_{y}v_{z}sin(a_{i})+v_{x}cos(a_{i})}
{sqrt{{v_{x}}^{2}+{v_{z}}^{2}}} right ]
The GradientTable object is immutable. Do NOT assign attributes.
If you have your gradient table in a bval & bvec format, we recommend
using the factory function gradient_table
Instances of the Logger class represent a single logging channel. A
“logging channel” indicates an area of an application. Exactly how an
“area” is defined is up to the application developer. Since an
application can have any number of areas, logging channels are identified
by a unique string. Application areas can be nested (e.g. an area
of “input processing” might include sub-areas “read CSV files”, “read
XLS files” and “read Gnumeric files”). To cater for this natural nesting,
channel names are organized into a namespace hierarchy where levels are
separated by periods, much like the Java or Python package namespace. So
in the instance given above, channel names might be “input” for the upper
level, and “input.csv”, “input.xls” and “input.gnu” for the sub-levels.
There is no arbitrary limit to the depth of nesting.
This function gives the unique rounded b-values of the data
dipy.core.gradients.unique_bvals is deprecated, Please use dipy.core.gradients.unique_bvals_magnitude instead
* deprecated from version: 1.2
* Raises <class ‘dipy.utils.deprecator.ExpiredDeprecationError’> as of version: 1.4
Parameters
———-
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude that the bvalues have to differ to be
considered an unique b-value. B-values are also rounded up to
this order of magnitude. Default: derive this value from the
maximal b-value provided: \(bmag=log_{10}(max(bvals)) - 1\).
rbvals : bool, optional
If True function also returns all individual rounded b-values.
Default: False
Returns
——-
ubvals : ndarray
Array containing the rounded unique b-values
The b-value, or magnitude, of each gradient direction.
bvecsarray_like (N, 3)
The direction, represented as a unit vector, of each gradient.
b0_thresholdfloat
Gradients with b-value less than or equal to b0_threshold are
considered to not have diffusion weighting. If its value is equal to or
larger than all values in b-vals, then it is assumed that no
thresholding is requested.
atolfloat
Each vector in bvecs must be a unit vectors up to a tolerance of
atol.
btenscan be any of three options
a string specifying the shape of the encoding tensor for all volumes
in data. Options: ‘LTE’, ‘PTE’, ‘STE’, ‘CTE’ corresponding to
linear, planar, spherical, and “cigar-shaped” tensor encoding.
Tensors are rotated so that linear and cigar tensors are aligned
with the corresponding gradient direction and the planar tensor’s
normal is aligned with the corresponding gradient direction.
Magnitude is scaled to match the b-value.
an array of strings of shape (N,), (N, 1), or (1, N) specifying
encoding tensor shape for each volume separately. N corresponds to
the number volumes in data. Options for elements in array: ‘LTE’,
‘PTE’, ‘STE’, ‘CTE’ corresponding to linear, planar, spherical, and
“cigar-shaped” tensor encoding. Tensors are rotated so that linear
and cigar tensors are aligned with the corresponding gradient
direction and the planar tensor’s normal is aligned with the
corresponding gradient direction. Magnitude is scaled to match the
b-value.
an array of shape (N,3,3) specifying the b-tensor of each volume
exactly. N corresponds to the number volumes in data. No rotation or
scaling is performed.
Often b0s (b-values which correspond to images without diffusion
weighting) have 0 values however in some cases the scanner cannot
provide b0s of an exact 0 value and it gives a bit higher values
e.g. 6 or 12. This is the purpose of the b0_threshold in the __init__.
We assume that the minimum number of b-values is 7.
Often b0s (b-values which correspond to images without diffusion
weighting) have 0 values however in some cases the scanner cannot
provide b0s of an exact 0 value and it gives a bit higher values
e.g. 6 or 12. This is the purpose of the b0_threshold in the __init__.
We assume that the minimum number of b-values is 7.
an array of shape (N,) or (1, N) or (N, 1) with the b-values.
a path for the file which contains an array like the above (1).
an array of shape (N, 4) or (4, N). Then this parameter is
considered to be a b-table which contains both bvals and bvecs. In
this case the next parameter is skipped.
a path for the file which contains an array like the one at (3).
bvecs : can be any of two options
an array of shape (N, 3) or (3, N) with the b-vectors.
a path for the file which contains an array like the previous.
big_deltafloat
acquisition pulse separation time in seconds (default None)
small_deltafloat
acquisition pulse duration time in seconds (default None)
b0_thresholdfloat
All b-values with values less than or equal to bo_threshold are
considered as b0s i.e. without diffusion weighting.
atolfloat
All b-vectors need to be unit vectors up to a tolerance.
btens : can be any of three options
a string specifying the shape of the encoding tensor for all volumes
in data. Options: ‘LTE’, ‘PTE’, ‘STE’, ‘CTE’ corresponding to
linear, planar, spherical, and “cigar-shaped” tensor encoding.
Tensors are rotated so that linear and cigar tensors are aligned
with the corresponding gradient direction and the planar tensor’s
normal is aligned with the corresponding gradient direction.
Magnitude is scaled to match the b-value.
an array of strings of shape (N,), (N, 1), or (1, N) specifying
encoding tensor shape for each volume separately. N corresponds to
the number volumes in data. Options for elements in array: ‘LTE’,
‘PTE’, ‘STE’, ‘CTE’ corresponding to linear, planar, spherical, and
“cigar-shaped” tensor encoding. Tensors are rotated so that linear
and cigar tensors are aligned with the corresponding gradient
direction and the planar tensor’s normal is aligned with the
corresponding gradient direction. Magnitude is scaled to match the
b-value.
an array of shape (N,3,3) specifying the b-tensor of each volume
exactly. N corresponds to the number volumes in data. No rotation or
scaling is performed.
Often b0s (b-values which correspond to images without diffusion
weighting) have 0 values however in some cases the scanner cannot
provide b0s of an exact 0 value and it gives a bit higher values
e.g. 6 or 12. This is the purpose of the b0_threshold in the __init__.
We assume that the minimum number of b-values is 7.
When correcting for motion, rotation of the diffusion-weighted volumes
might cause systematic bias in rotationally invariant measures, such as FA
and MD, and also cause characteristic biases in tractography, unless the
gradient directions are appropriately reoriented to compensate for this
effect [Leemans2009].
The nominal gradient table with which the data were acquired.
affineslist or ndarray of shape (4, 4, n) or (3, 3, n)
Each entry in this list or array contain either an affine
transformation (4,4) or a rotation matrix (3, 3).
In both cases, the transformations encode the rotation that was applied
to the image corresponding to one of the non-zero gradient directions
(ordered according to their order in gtab.bvecs[~gtab.b0s_mask])
“This function rounds the b-values
Parameters
———-
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude to round the b-values. If not given b-values
will be rounded relative to the order of magnitude
\(bmag = (bmagmax - 1)\), where bmaxmag is the magnitude order of the
larger b-value.
Returns
——-
rbvals : ndarray
Array containing the rounded b-values
Gives the unique b-values of the data, within a tolerance gap
The b-values must be regrouped in clusters easily separated by a
distance greater than the tolerance gap. If all the b-values of a
cluster fit within the tolerance gap, the highest b-value is kept.
This function gives the unique rounded b-values of the data
Parameters
———-
bvals : ndarray
Array containing the b-values
bmag : int
The order of magnitude that the bvalues have to differ to be
considered an unique b-value. B-values are also rounded up to
this order of magnitude. Default: derive this value from the
maximal b-value provided: \(bmag=log_{10}(max(bvals)) - 1\).
rbvals : bool, optional
If True function also returns all individual rounded b-values.
Default: False
Returns
——-
ubvals : ndarray
Array containing the rounded unique b-values
Check if you have enough different b-values in your gradient table
Parameters
———-
gtab : GradientTable class instance.
n_bvals : int
The number of different b-values you are checking for.
non_zero : bool
Whether to check only non-zero bvalues. In this case, we will require
at least n_bvals non-zero b-values (where non-zero is defined
depending on the gtab object’s b0_threshold attribute)
bmag : int
The order of magnitude of the b-values used. The function will
normalize the b-values relative \(10^{bmag}\). Default: derive this
value from the maximal b-value provided:
\(bmag=log_{10}(max(bvals)) - 1\).
Returns
——-
bool : Whether there are at least n_bvals different b-values in the
gradient table used.
anisotropy, in: R. Valiullin (Ed.), Diffusion NMR of Confined Systems: Fluid
Transport in Porous Solids and Heterogeneous Materials, Royal Society of
Chemistry, Cambridge, UK, 2016.
Radial basis function spread parameter. Defaults to approximate average
distance between nodes.
a good start
smooth : float
values greater than zero increase the smoothness of the
approximation with 0 as pure interpolation. Default: 0.1
normstr
A string indicating the function that returns the
“distance” between two points.
‘angle’ - The angle between two vectors
‘euclidean_norm’ - The Euclidean distance
Interpolates the 2D image at the given locations. This function is
a wrapper for _interpolate_scalar_2d for testing purposes, it is
equivalent to scipy.ndimage.map_coordinates with
bilinear interpolation
Interpolates the 3D image at the given locations. This function is
a wrapper for _interpolate_scalar_3d for testing purposes, it is
equivalent to scipy.ndimage.map_coordinates with
trilinear interpolation
Nearest neighbor interpolation of a 2D scalar image
Interpolates the 2D image at the given locations. This function is
a wrapper for _interpolate_scalar_nn_2d for testing purposes, it is
equivalent to scipy.ndimage.map_coordinates with
nearest neighbor interpolation
Nearest neighbor interpolation of a 3D scalar image
Interpolates the 3D image at the given locations. This function is
a wrapper for _interpolate_scalar_nn_3d for testing purposes, it is
equivalent to scipy.ndimage.map_coordinates with
nearest neighbor interpolation
Interpolates the 2D vector field at the given locations. This function is
a wrapper for _interpolate_vector_2d for testing purposes, it is
equivalent to using scipy.ndimage.map_coordinates with
bilinear interpolation at each vector component
Interpolates the 3D vector field at the given locations. This function is
a wrapper for _interpolate_vector_3d for testing purposes, it is
equivalent to using scipy.ndimage.map_coordinates with
trilinear interpolation at each vector component
data : array, float64 shape (X, Y, Z)
points : array, float64 shape(N, 3)
data_strides : array npy_intp shape (3,)
Strides sequence for data array
len_pointscnp.npy_intp
Number of points to interpolate
resultarray, float64 shape(N)
The output array. This array should be initialized before you call
this function. On exit it will contain the interpolated values from
data at points given by points.
Interpolates vector from 4D data at 3D point given by index
Interpolates a vector of length T from a 4D volume of shape (I, J, K, T),
given point (x, y, z) where (x, y, z) are the coordinates of the point in
real units (not yet adjusted for voxel size).
Given the shape of an array, an ndindex instance iterates over
the N-dimensional index of the array. At each iteration a tuple
of indices is returned; the last dimension is iterated over first.
A Mixin class to add a .reset() method to users of OneTimeProperty.
By default, auto attributes once computed, become static. If they happen
to depend on other parts of an object and those parts change, their values
may now be invalid.
This class offers a .reset() method that users can call explicitly when
they know the state of their objects may have changed and they want to
ensure that all their special attributes should be invalidated. Once
reset() is called, all their auto attributes are reset to their
OneTimeProperty descriptors, and their accessor functions will be triggered
again.
Warning
If a class has a set of attributes that are OneTimeProperty, but that
can be initialized from any one of them, do NOT use this mixin! For
instance, UniformTimeSeries can be initialized with only sampling_rate
and t0, sampling_interval and time are auto-computed. But if you were
to reset() a UniformTimeSeries, it would lose all 4, and there would be
then no way to break the circular dependency chains.
If this becomes a problem in practice (for our analyzer objects it
isn’t, as they don’t have the above pattern), we can extend reset() to
check for a _no_reset set of names in the instance which are meant to be
kept protected. But for now this is NOT done, so caveat emptor.
The method that will be called the first time to compute a value.
Afterwards, the method’s name will be a standard attribute holding
the value of this computation.
The method that will be called the first time to compute a value.
Afterwards, the method’s name will be a standard attribute holding the
value of this computation.
Extra arguments passed to the objective function and its
derivatives (Jacobian, Hessian).
methodstr, optional
Type of solver. Should be one of
‘Nelder-Mead’
‘Powell’
‘CG’
‘BFGS’
‘Newton-CG’
‘Anneal’
‘L-BFGS-B’
‘TNC’
‘COBYLA’
‘SLSQP’
‘dogleg’
‘trust-ncg’
jacbool or callable, optional
Jacobian of objective function. Only for CG, BFGS, Newton-CG,
dogleg, trust-ncg.
If jac is a Boolean and is True, fun is assumed to return the
value of Jacobian along with the objective function. If False, the
Jacobian will be estimated numerically.
jac can also be a callable returning the Jacobian of the
objective. In this case, it must accept the same arguments
as fun.
hess, hesspcallable, optional
Hessian of objective function or Hessian of objective function
times an arbitrary vector p. Only for Newton-CG,
dogleg, trust-ncg.
Only one of hessp or hess needs to be given. If hess is
provided, then hessp will be ignored. If neither hess nor
hessp is provided, then the hessian product will be approximated
using finite differences on jac. hessp must compute the Hessian
times an arbitrary vector.
boundssequence, optional
Bounds for variables (only for L-BFGS-B, TNC and SLSQP).
(min,max) pairs for each element in x, defining
the bounds on that parameter. Use None for one of min or
max when there is no bound in that direction.
constraintsdict or sequence of dict, optional
Constraints definition (only for COBYLA and SLSQP).
Each constraint is defined in a dictionary with fields:
typestr
Constraint type: ‘eq’ for equality, ‘ineq’ for inequality.
funcallable
The function defining the constraint.
jaccallable, optional
The Jacobian of fun (only for SLSQP).
argssequence, optional
Extra arguments to be passed to the function and Jacobian.
Equality constraint means that the constraint function result is to
be zero whereas inequality means that it is to be non-negative.
Note that COBYLA only supports inequality constraints.
tolfloat, optional
Tolerance for termination. For detailed control, use
solver-specific options.
callbackcallable, optional
Called after each iteration, as callback(xk), where xk is
the current parameter vector. Only available using Scipy >= 0.12.
optionsdict, optional
A dictionary of solver options. All methods accept the following
generic options:
maxiterint
Maximum number of iterations to perform.
dispbool
Set to True to print convergence messages.
For method-specific options, see
show_options(‘minimize’, method).
evolutionbool, optional
save history of x for each iteration. Only available using Scipy
>= 0.12.
Provide a sklearn-like uniform interface to algorithms that solve problems
of the form: \(y = Ax\) for \(x\)
Sub-classes of SKLearnLinearSolver should provide a ‘fit’ method that have
the following signature: SKLearnLinearSolver.fit(X, y), which would set
an attribute SKLearnLinearSolver.coef_, with the shape (X.shape[1],),
such that an estimate of y can be calculated as:
y_hat = np.dot(X, SKLearnLinearSolver.coef_.T)
Regularized least squares with linear matrix inequality constraints
Generate a CVXPY representation of a regularized least squares
optimization problem subject to linear matrix inequality constraints.
Parameters
———-
m : int
Positive int indicating the number of regressors.
A : array (t = m + k + 1, p, p) (optional)
Constraint matrices \(A\).
L : array (m, m) (optional)
Regularization matrix \(L\).
Default: None.
Notes
—–
The basic problem is to solve for \(h\) the minimization of
\(c=\|X h - y\|^2 + \|L h\|^2\),
where \(X\) is an (m, m) upper triangular design matrix and \(y\) is a set
of m measurements, subject to the constraint that
\(M=A_0+\sum_{i=0}^{m-1} h_i A_{i+1}+\sum_{j=0}^{k-1} s_j A_{m+j+1}>0\),
where \(s_j\) are slack variables and where the inequality sign denotes
positive definiteness of the matrix \(M\). The sparsity pattern and size
of \(X\) and \(y\) are fixed, because every design matrix and set of
measurements can be reduced to an equivalent (minimal) formulation of
this type.
This formulation is used here mainly to enforce polynomial
sum-of-squares constraints on various models, as described in [1]_.
References
———-
.. [1] Dela Haije et al. “Enforcing necessary non-negativity constraints
for common diffusion MRI models using sum of squares
programming”. NeuroImage 209, 2020, 116405.
Solve CVXPY problem
Solve a CVXPY problem instance for a given design matrix and a given set
of observations, and return the optimum.
Parameters
———-
design_matrix : array (n, m)
Design matrix.
measurements : array (n)
Measurements.
check : boolean (optional)
If True check whether the unconstrained optimization solution
already satisfies the constraints, before running the constrained
optimization. This adds overhead, but can avoid unnecessary
constrained optimization calls.
Default: False
kwargs : keyword arguments
Arguments passed to the CVXPY solve method.
Returns
——-
h : array (m)
Estimated optimum for problem variables \(h\).
You can use it in all different ways developed in pstats
for example
print_stats(10) will give you the 10 slowest calls
or
print_stats(‘function_name’)
will give you the stats for all the calls with name ‘function_name’
B.A. Wichmann, I.D. Hill, Generating good pseudo-random numbers,
Computational Statistics & Data Analysis, Volume 51, Issue 3, 1
December 2006, Pages 1614-1622, ISSN 0167-9473, DOI:
10.1016/j.csda.2006.05.019.
(https://www.sciencedirect.com/science/article/abs/pii/S0167947306001836)
for advice on generating many sequences for use together, and on
alternative algorithms and codes
Algorithm AS 183 Appl. Statist. (1982) vol.31, no.2.
Returns a pseudo-random number rectangularly distributed
between 0 and 1. The cycle length is 6.95E+12 (See page 123
of Applied Statistics (1984) vol.33), not as claimed in the
original article.
ix, iy and iz should be set to integer values between 1 and
30000 before the first entry.
A HemiSphere is similar to a Sphere but it takes antipodal symmetry into
account. Antipodal symmetry means that point v on a HemiSphere is the same
as the point -v. Duplicate points are discarded when constructing a
HemiSphere (including antipodal duplicates). edges and faces are
remapped to the remaining points as closely as possible.
The HemiSphere can be constructed using one of three conventions:
Places charges on a sphere and simulates the repulsive forces felt by each
one. Allows the charges to move for some number of iterations and returns
their final location as well as the total potential of the system at each
step.
This function is meant to be used with diffusion imaging so antipodal
symmetry is assumed. Therefore, each charge must not only be unique, but if
there is a charge at +x, there cannot be a charge at -x. These are treated
as the same location and because the distance between the two charges will
be zero, the result will be unstable.
Checks the euler characteristic of a sphere
If \(f\) = number of faces, \(e\) = number_of_edges and \(v\) = number of
vertices, the Euler formula says \(f-e+v = 2\) for a mesh on a sphere. More
generally, whether \(f -e + v == \chi\) where \(\chi\) is the Euler
characteristic of the mesh.
- Open chain (track) has \(\chi=1\)
- Closed chain (loop) has \(\chi=0\)
- Disk has \(\chi=1\)
- Sphere has \(\chi=2\)
- HemiSphere has \(\chi=1\)
Parameters
———-
sphere : Sphere
A Sphere instance with vertices, edges and faces attributes.
chi : int, optional
The Euler characteristic of the mesh to be checked
Returns
——-
check : bool
True if the mesh has Euler characteristic \(\chi\)
Examples
——–
>>> euler_characteristic_check(unit_octahedron)
True
>>> hemisphere = HemiSphere.from_sphere(unit_icosahedron)
>>> euler_characteristic_check(hemisphere, chi=1)
True
An array object represents a multidimensional, homogeneous array
of fixed-size items. An associated data-type object describes the
format of each element in the array (its byte-order, how many bytes it
occupies in memory, whether it is an integer, a floating point number,
or something else, etc.)
Arrays should be constructed using array, zeros or empty (refer
to the See Also section below). The parameters given here refer to
a low-level method (ndarray(…)) for instantiating an array.
For more information, refer to the numpy module and examine the
methods and attributes of an array.
Describes the format of the elements in the array.
flagsdict
Dictionary containing information related to memory use, e.g.,
‘C_CONTIGUOUS’, ‘OWNDATA’, ‘WRITEABLE’, etc.
flatnumpy.flatiter object
Flattened version of the array as an iterator. The iterator
allows assignments, e.g., x.flat=3 (See ndarray.flat for
assignment examples; TODO).
imagndarray
Imaginary part of the array.
realndarray
Real part of the array.
sizeint
Number of elements in the array.
itemsizeint
The memory use of each array element in bytes.
nbytesint
The total number of bytes required to store the array data,
i.e., itemsize*size.
ndimint
The array’s number of dimensions.
shapetuple of ints
Shape of the array.
stridestuple of ints
The step-size required to move from one element to the next in
memory. For example, a contiguous (3,4) array of type
int16 in C-order has strides (8,2). This implies that
to move from element to element in memory requires jumps of 2 bytes.
To move from row-to-row, one needs to jump 8 bytes at a time
(2*4).
ctypesctypes object
Class containing properties of the array needed for interaction
with ctypes.
basendarray
If the array is a view into another array, that array is its base
(unless that array is also a view). The base array is where the
array data is actually stored.
array : Construct an array.
zeros : Create an array, each element of which is zero.
empty : Create an array, but leave its allocated memory unchanged (i.e.,
it contains “garbage”).
dtype : Create a data-type.
numpy.typing.NDArray : An ndarray alias generic
An array object represents a multidimensional, homogeneous array
of fixed-size items. An associated data-type object describes the
format of each element in the array (its byte-order, how many bytes it
occupies in memory, whether it is an integer, a floating point number,
or something else, etc.)
Arrays should be constructed using array, zeros or empty (refer
to the See Also section below). The parameters given here refer to
a low-level method (ndarray(…)) for instantiating an array.
For more information, refer to the numpy module and examine the
methods and attributes of an array.
Describes the format of the elements in the array.
flagsdict
Dictionary containing information related to memory use, e.g.,
‘C_CONTIGUOUS’, ‘OWNDATA’, ‘WRITEABLE’, etc.
flatnumpy.flatiter object
Flattened version of the array as an iterator. The iterator
allows assignments, e.g., x.flat=3 (See ndarray.flat for
assignment examples; TODO).
imagndarray
Imaginary part of the array.
realndarray
Real part of the array.
sizeint
Number of elements in the array.
itemsizeint
The memory use of each array element in bytes.
nbytesint
The total number of bytes required to store the array data,
i.e., itemsize*size.
ndimint
The array’s number of dimensions.
shapetuple of ints
Shape of the array.
stridestuple of ints
The step-size required to move from one element to the next in
memory. For example, a contiguous (3,4) array of type
int16 in C-order has strides (8,2). This implies that
to move from element to element in memory requires jumps of 2 bytes.
To move from row-to-row, one needs to jump 8 bytes at a time
(2*4).
ctypesctypes object
Class containing properties of the array needed for interaction
with ctypes.
basendarray
If the array is a view into another array, that array is its base
(unless that array is also a view). The base array is where the
array data is actually stored.
array : Construct an array.
zeros : Create an array, each element of which is zero.
empty : Create an array, but leave its allocated memory unchanged (i.e.,
it contains “garbage”).
dtype : Create a data-type.
numpy.typing.NDArray : An ndarray alias generic
An array object represents a multidimensional, homogeneous array
of fixed-size items. An associated data-type object describes the
format of each element in the array (its byte-order, how many bytes it
occupies in memory, whether it is an integer, a floating point number,
or something else, etc.)
Arrays should be constructed using array, zeros or empty (refer
to the See Also section below). The parameters given here refer to
a low-level method (ndarray(…)) for instantiating an array.
For more information, refer to the numpy module and examine the
methods and attributes of an array.
Describes the format of the elements in the array.
flagsdict
Dictionary containing information related to memory use, e.g.,
‘C_CONTIGUOUS’, ‘OWNDATA’, ‘WRITEABLE’, etc.
flatnumpy.flatiter object
Flattened version of the array as an iterator. The iterator
allows assignments, e.g., x.flat=3 (See ndarray.flat for
assignment examples; TODO).
imagndarray
Imaginary part of the array.
realndarray
Real part of the array.
sizeint
Number of elements in the array.
itemsizeint
The memory use of each array element in bytes.
nbytesint
The total number of bytes required to store the array data,
i.e., itemsize*size.
ndimint
The array’s number of dimensions.
shapetuple of ints
Shape of the array.
stridestuple of ints
The step-size required to move from one element to the next in
memory. For example, a contiguous (3,4) array of type
int16 in C-order has strides (8,2). This implies that
to move from element to element in memory requires jumps of 2 bytes.
To move from row-to-row, one needs to jump 8 bytes at a time
(2*4).
ctypesctypes object
Class containing properties of the array needed for interaction
with ctypes.
basendarray
If the array is a view into another array, that array is its base
(unless that array is also a view). The base array is where the
array data is actually stored.
array : Construct an array.
zeros : Create an array, each element of which is zero.
empty : Create an array, but leave its allocated memory unchanged (i.e.,
it contains “garbage”).
dtype : Create a data-type.
numpy.typing.NDArray : An ndarray alias generic
An array object represents a multidimensional, homogeneous array
of fixed-size items. An associated data-type object describes the
format of each element in the array (its byte-order, how many bytes it
occupies in memory, whether it is an integer, a floating point number,
or something else, etc.)
Arrays should be constructed using array, zeros or empty (refer
to the See Also section below). The parameters given here refer to
a low-level method (ndarray(…)) for instantiating an array.
For more information, refer to the numpy module and examine the
methods and attributes of an array.
Describes the format of the elements in the array.
flagsdict
Dictionary containing information related to memory use, e.g.,
‘C_CONTIGUOUS’, ‘OWNDATA’, ‘WRITEABLE’, etc.
flatnumpy.flatiter object
Flattened version of the array as an iterator. The iterator
allows assignments, e.g., x.flat=3 (See ndarray.flat for
assignment examples; TODO).
imagndarray
Imaginary part of the array.
realndarray
Real part of the array.
sizeint
Number of elements in the array.
itemsizeint
The memory use of each array element in bytes.
nbytesint
The total number of bytes required to store the array data,
i.e., itemsize*size.
ndimint
The array’s number of dimensions.
shapetuple of ints
Shape of the array.
stridestuple of ints
The step-size required to move from one element to the next in
memory. For example, a contiguous (3,4) array of type
int16 in C-order has strides (8,2). This implies that
to move from element to element in memory requires jumps of 2 bytes.
To move from row-to-row, one needs to jump 8 bytes at a time
(2*4).
ctypesctypes object
Class containing properties of the array needed for interaction
with ctypes.
basendarray
If the array is a view into another array, that array is its base
(unless that array is also a view). The base array is where the
array data is actually stored.
array : Construct an array.
zeros : Create an array, each element of which is zero.
empty : Create an array, but leave its allocated memory unchanged (i.e.,
it contains “garbage”).
dtype : Create a data-type.
numpy.typing.NDArray : An ndarray alias generic
A HemiSphere is similar to a Sphere but it takes antipodal symmetry into
account. Antipodal symmetry means that point v on a HemiSphere is the same
as the point -v. Duplicate points are discarded when constructing a
HemiSphere (including antipodal duplicates). edges and faces are
remapped to the remaining points as closely as possible.
The HemiSphere can be constructed using one of three conventions:
Random unit vectors from a uniform distribution on the sphere.
Parameters
———-
n : int
Number of random vectors
coords : {‘xyz’, ‘radians’, ‘degrees’}
‘xyz’ for cartesian form
‘radians’ for spherical form in rads
‘degrees’ for spherical form in degrees
Notes
—–
The uniform distribution on the sphere, parameterized by spherical
coordinates \((\theta, \phi)\), should verify \(\phi\sim U[0,2\pi]\), while
\(z=\cos(\theta)\sim U[-1,1]\).
References
———-
.. [1] https://mathworld.wolfram.com/SpherePointPicking.html.
Returns
——-
X : array, shape (n,3) if coords=’xyz’ or shape (n,2) otherwise
Uniformly distributed vectors on the unit sphere.
Examples
——–
>>> from dipy.core.sphere_stats import random_uniform_on_sphere
>>> X = random_uniform_on_sphere(4, ‘radians’)
>>> X.shape == (4, 2)
True
>>> X = random_uniform_on_sphere(4, ‘xyz’)
>>> X.shape == (4, 3)
True
Principal direction and confidence ellipse
Implements equations in section 6.3.1(ii) of Fisher, Lewis and
Embleton, supplemented by equations in section 3.2.5.
Parameters
———-
points : array_like (N,3)
array of points on the sphere of radius 1 in \(\mathbb{R}^3\)
alpha : real or None
1 minus the coverage for the confidence ellipsoid, e.g. 0.05 for 95%
coverage.
Returns
——-
centre : vector (3,)
centre of ellipsoid
b1 : vector (2,)
lengths of semi-axes of ellipsoid
Creates a unit sphere by subdividing a unit octahedron.
Starts with a unit octahedron and subdivides the faces, projecting the
resulting points onto the surface of a unit sphere.
Parameters
———-
recursion_level : int
Level of subdivision, recursion_level=1 will return an octahedron,
anything bigger will return a more subdivided sphere. The sphere will
have \(4^recursion_level+2\) vertices.
Returns
——-
Sphere :
The unit sphere.
See Also
——–
create_unit_hemisphere, Sphere
Creates a unit sphere by subdividing a unit octahedron, returns half
the sphere.
Parameters
———-
recursion_level : int
Level of subdivision, recursion_level=1 will return an octahedron,
anything bigger will return a more subdivided sphere. The sphere will
have \((4^recursion_level+2)/2\) vertices.
Returns
——-
HemiSphere :
Half of a unit sphere.
See Also
——–
create_unit_sphere, Sphere, HemiSphere