MCPcopy Create free account
hub / github.com/dask/dask / norm

Function norm

dask/array/linalg.py:1470–1541  ·  view source on GitHub ↗
(x, ord=None, axis=None, keepdims=False)

Source from the content-addressed store, hash-verified

1468
1469@derived_from(np.linalg)
1470def norm(x, ord=None, axis=None, keepdims=False):
1471 if axis is None:
1472 axis = tuple(range(x.ndim))
1473 elif isinstance(axis, Number):
1474 axis = (int(axis),)
1475 else:
1476 axis = tuple(axis)
1477
1478 if len(axis) > 2:
1479 raise ValueError("Improper number of dimensions to norm.")
1480
1481 if ord == "fro":
1482 ord = None
1483 if len(axis) == 1:
1484 raise ValueError("Invalid norm order for vectors.")
1485
1486 r = abs(x)
1487
1488 if ord is None:
1489 r = (r**2).sum(axis=axis, keepdims=keepdims) ** 0.5
1490 elif ord == "nuc":
1491 if len(axis) == 1:
1492 raise ValueError("Invalid norm order for vectors.")
1493 if x.ndim > 2:
1494 raise NotImplementedError("SVD based norm not implemented for ndim > 2")
1495
1496 r = svd(x)[1][None].sum(keepdims=keepdims)
1497 elif ord == np.inf:
1498 if len(axis) == 1:
1499 r = r.max(axis=axis, keepdims=keepdims)
1500 else:
1501 r = r.sum(axis=axis[1], keepdims=True).max(axis=axis[0], keepdims=True)
1502 if keepdims is False:
1503 r = r.squeeze(axis=axis)
1504 elif ord == -np.inf:
1505 if len(axis) == 1:
1506 r = r.min(axis=axis, keepdims=keepdims)
1507 else:
1508 r = r.sum(axis=axis[1], keepdims=True).min(axis=axis[0], keepdims=True)
1509 if keepdims is False:
1510 r = r.squeeze(axis=axis)
1511 elif ord == 0:
1512 if len(axis) == 2:
1513 raise ValueError("Invalid norm order for matrices.")
1514
1515 r = (r != 0).astype(r.dtype).sum(axis=axis, keepdims=keepdims)
1516 elif ord == 1:
1517 if len(axis) == 1:
1518 r = r.sum(axis=axis, keepdims=keepdims)
1519 else:
1520 r = r.sum(axis=axis[0], keepdims=True).max(axis=axis[1], keepdims=True)
1521 if keepdims is False:
1522 r = r.squeeze(axis=axis)
1523 elif len(axis) == 2 and ord == -1:
1524 r = r.sum(axis=axis[0], keepdims=True).min(axis=axis[1], keepdims=True)
1525 if keepdims is False:
1526 r = r.squeeze(axis=axis)
1527 elif len(axis) == 2 and ord == 2:

Callers

nothing calls this directly

Calls 6

svdFunction · 0.85
sumMethod · 0.45
maxMethod · 0.45
squeezeMethod · 0.45
minMethod · 0.45
astypeMethod · 0.45

Tested by

no test coverage detected