# tfg.math.interpolation.bspline.knot_weights

Function that converts cardinal B-spline positions to knot weights.

``````tfg.math.interpolation.bspline.knot_weights(
positions,
num_knots,
degree,
cyclical,
sparse_mode=False,
name=None
)
``````

Defined in `math/interpolation/bspline.py`.

#### Note:

In the following, A1 to An are optional batch dimensions.

#### Args:

• `positions`: A tensor with shape `[A1, .. An]`. Positions must be between `[0, C - D)` for non-cyclical and `[0, C)` for cyclical splines, where `C` is the number of knots and `D` is the spline degree.
• `num_knots`: A strictly positive `int` describing the number of knots in the spline.
• `degree`: An `int` describing the degree of the spline, which must be smaller than `num_knots`.
• `cyclical`: A `bool` describing whether the spline is cyclical.
• `sparse_mode`: A `bool` describing whether to return a result only for the knots with nonzero weights. If set to True, the function returns the weights of only the `degree` + 1 knots that are non-zero, as well as the indices of the knots.
• `name`: A name for this op. Defaults to "bsplines_knot_weights".

#### Returns:

A tensor with dense weights for each control point, with the shape `[A1, ... An, C]` if `sparse_mode` is False. Otherwise, returns a tensor of shape `[A1, ... An, D + 1]` that contains the non-zero weights, and a tensor with the indices of the knots, with the type tf.int32.

#### Raises:

• `ValueError`: If degree is greater than 4 or num_knots - 1, or less than 0.
• `InvalidArgumentError`: If positions are not in the right range.