# 信噪比的上下限 low = 5 high = 60 step = 5 # 显示进度 manager = multiprocessing.Manager() schedule = manager.Array('i', [1, 0]) time1 = ((int)((high - low) / step + 1)) time2 = 1 << a schedule[0] = time1 * time2 # 读入信道数据 channelDataPath = path + u'channelDataP.xlsx' channelDataAll = readAndWriteDataSet.excelToMatrixList(channelDataPath) n = np.shape(channelDataAll[0])[1] # 列数 p = np.shape(channelDataAll)[0] # 页数 sub = n >> a if iRate > sub: print(u'降维后维度不能大于样本原有的维度!') sys.exit() if iRate <= 0: print(u'降维后维度不能小于1!') sys.exit() # 读入协方差聚类中心,计算变换矩阵 allCentroidsC, allCentroidUList = readAndWriteDataSet.readCentroids(path, iRate, u'C', a) # 读入变换矩阵聚类中心,计算变换矩阵
def cluster(schedule, path, suffix, channelData, g, iRate): if iRate > np.shape(channelData)[1]: print(u'降维后维度不能大于样本原有的维度!') return if iRate <= 0: print(u'降维后维度不能小于1!') return schedule[1] += 1 tmpSchedule = schedule[1] print(u'共' + str(schedule[0]) + u'部分,' + u'第' + str(tmpSchedule) + u'部分开始!') pathSuffix = "C" + "_" + str(g) + "_" centroidListPath = path + "getCentroids_outCentroidList_" + pathSuffix nowTime = time.strftime("%Y-%m-%d.%H.%M.%S", time.localtime(time.time())) pathSuffix = pathSuffix + str(nowTime) outOldCovMatrixListPath = path + "cluster_outOldCovMatrixList_" + pathSuffix outClusterAssmentPath = path + "cluster_outClusterAssment_" + pathSuffix outNewChannelDataPath = path + "cluster_outNewChannelData_" + pathSuffix outNewCovMatrixsPath = path + "cluster_outNewCovMatrixList_" + pathSuffix ratesPath = path + "cluster_rates_" + pathSuffix UTsPath = path + "cluster_UTs_" + pathSuffix # 读入聚类中心信息 # 合并多个文件 centroidList = [] for root, dirs, files in os.walk(path, topdown=True): for file in files: file = os.path.join(root, file) if centroidListPath in file: centroidListTmp = readAndWriteDataSet.excelToMatrixList(file) for centroid in centroidListTmp: centroidList.append(centroid) break centroids = tools.matrixListToMatrix(centroidList) # 计算信道相关系数矩阵并输出,然后放到一个矩阵中 covMatrixList = tools.getCovMatrixList(channelData) allCovMatrix = tools.matrixListToMatrix(covMatrixList) # 确定每个数据分别属于哪个簇 clusterAssment = kmeans.getClusterAssment(allCovMatrix, centroids) clusterAssmentList = [] clusterAssmentList.append(clusterAssment) # 分析PCA效果 newChannelData, newCovMatrixList, UTs, rates = pca.pca( channelData, covMatrixList, centroidList, clusterAssment, iRate) # 输出结果 # 输出聚类结果 readAndWriteDataSet.write(clusterAssmentList, outClusterAssmentPath, suffix) # 协方差矩阵太大了,先不输出 # readAndWriteDataSet.write(covMatrixList, outOldCovMatrixListPath, suffix) # 输出PCA结果 readAndWriteDataSet.write(newChannelData, outNewChannelDataPath, suffix) readAndWriteDataSet.write(newCovMatrixList, outNewCovMatrixsPath, suffix) readAndWriteDataSet.write(UTs, UTsPath, suffix) readAndWriteDataSet.write(rates, ratesPath, suffix) # 显示进度 print(u'共' + str(schedule[0]) + u'部分,' + u'第' + str(tmpSchedule) + u'部分完成,' + u'已完成' + str(schedule[1]) + u'部分,' + u'完成度:' + '%.2f%%' % (schedule[1] / schedule[0] * 100) + u'!')