xarray.cross#
- xarray.cross(a, b, *, dim)[source]#
Compute the cross product of two (arrays of) vectors.
The cross product of a and b in \(R^3\) is a vector perpendicular to both a and b. The vectors in a and b are defined by the values along the dimension dim and can have sizes 1, 2 or 3. Where the size of either a or b is 1 or 2, the remaining components of the input vector is assumed to be zero and the cross product calculated accordingly. In cases where both input vectors have dimension 2, the z-component of the cross product is returned.
- Parameters
Examples
Vector cross-product with 3 dimensions:
>>> a = xr.DataArray([1, 2, 3]) >>> b = xr.DataArray([4, 5, 6]) >>> xr.cross(a, b, dim="dim_0") <xarray.DataArray (dim_0: 3)> Size: 24B array([-3, 6, -3]) Dimensions without coordinates: dim_0
Vector cross-product with 3 dimensions but zeros at the last axis yields the same results as with 2 dimensions:
>>> a = xr.DataArray([1, 2, 0]) >>> b = xr.DataArray([4, 5, 0]) >>> xr.cross(a, b, dim="dim_0") <xarray.DataArray (dim_0: 3)> Size: 24B array([ 0, 0, -3]) Dimensions without coordinates: dim_0
Multiple vector cross-products. Note that the direction of the cross product vector is defined by the right-hand rule:
>>> a = xr.DataArray( ... [[1, 2, 3], [4, 5, 6]], ... dims=("time", "cartesian"), ... coords=dict( ... time=(["time"], [0, 1]), ... cartesian=(["cartesian"], ["x", "y", "z"]), ... ), ... ) >>> b = xr.DataArray( ... [[4, 5, 6], [1, 2, 3]], ... dims=("time", "cartesian"), ... coords=dict( ... time=(["time"], [0, 1]), ... cartesian=(["cartesian"], ["x", "y", "z"]), ... ), ... ) >>> xr.cross(a, b, dim="cartesian") <xarray.DataArray (time: 2, cartesian: 3)> Size: 48B array([[-3, 6, -3], [ 3, -6, 3]]) Coordinates: * time (time) int64 16B 0 1 * cartesian (cartesian) <U1 12B 'x' 'y' 'z'
Cross can be called on Datasets by converting to DataArrays and later back to a Dataset:
>>> ds_a = xr.Dataset(dict(x=("dim_0", [1]), y=("dim_0", [2]), z=("dim_0", [3]))) >>> ds_b = xr.Dataset(dict(x=("dim_0", [4]), y=("dim_0", [5]), z=("dim_0", [6]))) >>> c = xr.cross( ... ds_a.to_dataarray("cartesian"), ... ds_b.to_dataarray("cartesian"), ... dim="cartesian", ... ) >>> c.to_dataset(dim="cartesian") <xarray.Dataset> Size: 24B Dimensions: (dim_0: 1) Dimensions without coordinates: dim_0 Data variables: x (dim_0) int64 8B -3 y (dim_0) int64 8B 6 z (dim_0) int64 8B -3
See also
numpy.cross
Corresponding numpy function