4d矩阵与2d矩阵相互映射关系

 4d矩阵与2d矩阵相互映射关系,svd降维时候用到。

import cupy as cp

d4 = cp.linspace(1, 1000, 1000).reshape(10, 4, 5, 5)  # [N,C,d,d]

def four_2_two(d4):
    N, C, d, _ = d4.shape
    d2 = cp.empty([d * N, d * C])
    def innrt(i1, i2, i3, i4, d):
        j1 = (i1 - 1) * d + i3
        j2 = (i2 - 1) * d + i4
        return j1, j2
    for i1 in range(N):
        for i2 in range(C):
            for i3 in range(d):
                for i4 in range(d):
                    j1, j2 = innrt(i1, i2, i3, i4, d)
                    d2[j1, j2] = d4[i1, i2, i3, i4]
    return d2
re_d2 =four_2_two(d4)
print(len(cp.unique(re_d2)))


def two_2_four(d2):
    h,w = d2.shape
    N, C, d, _ = (10, 4, 5, 5)
    d4 = cp.empty((10, 4, 5, 5))
    def innrt(i1, i2, i3, i4, d):
        j1 = (i1 - 1) * d + i3
        j2 = (i2 - 1) * d + i4
        return j1, j2
    for i1 in range(N):
        for i2 in range(C):
            for i3 in range(d):
                for i4 in range(d):
                    j1, j2 = innrt(i1, i2, i3, i4, d)
                    d4[i1, i2, i3, i4] = d2[j1, j2]
    return d4

re_d4= two_2_four(re_d2)
print(len(cp.unique(re_d4)))

猜你喜欢

转载自blog.csdn.net/weixin_39875161/article/details/105376780