def to_intervals(X):
def _roll_rows(x):
""" Circularly shift ('roll') rows i in array by -i, recursively.
If 2d-array: circularly shift each row i to the left, i times so that
X(i, j-i) = X(i, j)
If 3d-array (or 4d, 5d..):
X(i, j-i, k-j) = X(i, j, k)
"""
if len(x.shape) > 2:
x = np.array([_roll_rows(xi) for xi in x])
elif len(x.shape) == 1:
raise ValueError('Method requires nd-array with n >= 2.')
x_rolled = np.array([np.roll(xi, -i, axis=0) for i, xi in enumerate(x)])
return x_rolled
X_rolled = _roll_rows(X)
X_inv = np.sum(X_rolled, axis=0)
return X_inv
## ------------------------- feature alignment
评论列表
文章目录