宇郑 发表于 2023-7-24 16:11

pyton KSVD算法实现【AI】【分享】

# pyton KSVD算法实现

import numpy as np


def ksvd(Y, D, K, S, T):
    """
    :param Y: 观测信号
    :param D: 字典
    :param K: 稀疏度
    :param S: 迭代次数
    :param T: 迭代阈值
    :return: 稀疏系数
    """
    # 初始化稀疏系数
    X = np.zeros((D.shape[1], Y.shape[1]))
    # 初始化误差
    E = Y
    # 初始化字典
    D = D / np.linalg.norm(D, axis=0)
    for i in range(S):
      # 更新稀疏系数
      for j in range(Y.shape[1]):
            # 提取非零元素的下标
            pos = np.nonzero(X[:, j])[0]
            # 提取对应的字典
            Dj = D[:, pos]
            # 更新稀疏系数
            X = np.linalg.pinv(Dj).dot(Y[:, j] - D.dot(X[:, j]) + Dj.dot(X))
      # 更新字典
      for k in range(D.shape[1]):
            # 提取非零元素的下标
            pos = np.nonzero(X)[0]
            # 判断非零元素是否大于0
            if len(pos) > 0:
                # 提取对应的稀疏系数
                Xk = X
                # 更新字典
                D[:, k] = (Y[:, pos] - D.dot(X[:, pos]) + D[:, k].dot(Xk)).dot(Xk) / np.linalg.norm(
                  Y[:, pos] - D.dot(X[:, pos]) + D[:, k].dot(Xk))
                # 更新误差
                E[:, pos] = Y[:, pos] - D.dot(X[:, pos])
      # 判断误差是否小于阈值
      if np.linalg.norm(E) < T:
            break
    return X


if __name__ == '__main__':
    # 生成字典
    D = np.random.randn(64, 256)
    # 生成稀疏系数
    X = np.zeros((D.shape[1], 1))
    X[0:10, 0] = np.random.randn(10)
    X[10:20, 0] = np.random.randn(10)
    X[20:30, 0] = np.random.randn(10)
    X[30:40, 0] = np.random.randn(10)
    X[40:50, 0] = np.random.randn(10)
    X[50:60, 0] = np.random.randn(10)
    X[60:70, 0] = np.random.randn(10)
    X[70:80, 0] = np.random.randn(10)
    X[80:90, 0] = np.random.randn(10)
    X[90:100, 0] = np.random.randn(10)
    # 生成观测信号
    Y = D.dot(X)
    # 调用KSVD算法
    X_ = ksvd(Y, D, 10, 100, 1e-6)
    print(X_)



sjtkxy 发表于 2023-7-25 05:08

Hao浩宇 发表于 2023-7-25 10:31

大佬能补发一下那个AS么 请你喝水

宇郑 发表于 2023-7-25 11:15

Hao浩宇 发表于 2023-7-25 10:31
大佬能补发一下那个AS么 请你喝水

你需要我怎么搞

独鹤 发表于 2023-8-12 09:28

谢谢分享!!

longge188 发表于 2023-9-24 14:52

谢谢分享

小白哎 发表于 2023-12-28 20:14

谢谢谢呱呱呱打打打顶顶顶顶
页: [1]
查看完整版本: pyton KSVD算法实现【AI】【分享】