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

Function norm

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

Source from the content-addressed store, hash-verified

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