计算了hs,还没验证,需要修改线程的参数,将结果直接写入对应的知识颗粒目录里,不需要在内存中合并

This commit is contained in:
zzh 2023-09-21 15:24:14 +08:00
parent ae3fbe017d
commit 1a02c97c66
15 changed files with 373 additions and 29 deletions

View File

@ -113,6 +113,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="matlab_io.h" /> <ClInclude Include="matlab_io.h" />
<ClInclude Include="thread_pool.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="matlab_io.cpp" /> <ClCompile Include="matlab_io.cpp" />

View File

@ -25,6 +25,9 @@
<ClInclude Include="matlab_io.h"> <ClInclude Include="matlab_io.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="thread_pool.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="matlab_io.cpp"> <ClCompile Include="matlab_io.cpp">

View File

@ -44,6 +44,8 @@ bool ReadMtxString(const string& filePath, const string& mtxName,
vStr[i * colNum + j] = strBuf; vStr[i * colNum + j] = strBuf;
} }
} }
*pRowNum = rowNum;
*pColNum = colNum;
return true; return true;
} }

View File

@ -120,6 +120,7 @@
<ClInclude Include="common.h" /> <ClInclude Include="common.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="calc_entropy.cpp" />
<ClCompile Include="main.cpp" /> <ClCompile Include="main.cpp" />
<ClCompile Include="process_pubmed_txt.cpp"> <ClCompile Include="process_pubmed_txt.cpp">
<PrecompiledHeader>Create</PrecompiledHeader> <PrecompiledHeader>Create</PrecompiledHeader>

View File

@ -26,6 +26,9 @@
<ClCompile Include="main.cpp"> <ClCompile Include="main.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="calc_entropy.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="PropertySheet.props" /> <None Include="PropertySheet.props" />

View File

@ -0,0 +1,301 @@
/*********************************************************************************************
Description:
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/20
***********************************************************************************************/
#include <iostream>
#include <fstream>
#include <sstream>
#include <filesystem>
#include <vector>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <omp.h>
#include <time.h>
#include <vector>
#include <queue>
#include <thread>
#include <cctype>
#include <cmath>
#ifdef _WIN32
#include <io.h>
#include <process.h>
#define F_OK 0
#else
#include <unistd.h>
#endif
#include <mat.h>
#include "common.h"
#include "CommonLib/thread_pool.h"
#include "CommonLib/matlab_io.h"
using namespace std;
using std::cout;
using std::vector;
namespace fs = std::filesystem;
#include "common.h"
#include "CommonLib/matlab_io.h"
using namespace std;
// 遍历知识颗粒,循环处理
#define FOREACH_PARTICLE_START \
for (auto &childDir : fs::directory_iterator(parrentDir)) { \
for (auto &file : fs::directory_iterator(childDir)) { \
const string &fileName = file.path().filename().string(); \
auto rPos = fileName.rfind(wordMatSuffix); \
if (rPos != string::npos && fileName.size() - rPos == wordMatSuffix.size()) {
#define FOREACH_PARTICLE_END \
} \
} \
}
/* 读取二层cell包裹的字符串,和数值ds,fr */
#define OUTER_FOR_BEGIN \
rowNum = (int)mxGetM(pMxArray); \
colNum = (int)mxGetN(pMxArray); \
for (int i = 0; i < rowNum; ++i) { \
for (int j = 0; j < colNum; ++j) { \
pCell = mxGetCell(pMxArray, j * rowNum + i); \
int childRowNum = (int)mxGetM(pCell); \
int childColNum = (int)mxGetN(pCell);
#define OUTER_FOR_END \
} \
} \
mxDestroyArray(pMxArray);
#define INNTER_FOR_BEGIN \
for (int ii = 0; ii < childRowNum; ii++) { \
for (int jj = 0; jj < childColNum; jj++) { \
mxArray *pChildCell = mxGetCell(pCell, jj * childRowNum + ii);
#define INNTER_FOR_END \
} \
}
// 将matlab存储方式转换成c存储方式
#define TRANS_ROW_COL(dst, src, rowNum, colNum) \
for (int rowI = 0; rowI < rowNum; ++rowI) { \
for (int colJ = 0; colJ < colNum; ++colJ) { \
dst[rowI * colNum + colJ] = src[colJ * rowNum + rowI]; \
} \
}
// 读取ds和fr信息
bool ReadInfoFromMat(const string & filePath, vector<vector<string> >&vvDs, vector<vector<double> >&vvFr) {
MATFile* pMatFile = nullptr;
mxArray* pMxArray = nullptr;
mxArray* pCell = nullptr;
int rowNum, colNum;
char strBuf[STRING_BUF_SIZE];
const string& parrentName = "G";
const string& firstChildName = "ds";
const string& secondChildName = "fr";
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
if (pMatFile == nullptr) {
cout << "filePath is error!" << endl;
return false;
}
mxArray* pMxG = matGetVariable(pMatFile, parrentName.c_str()); //获取G变量
// 读取ds字符串
pMxArray = mxGetField(pMxG, 0, firstChildName.c_str()); // ds
OUTER_FOR_BEGIN
// cout << childRowNum << '\t' << childColNum << endl;
vvDs.push_back(vector<string>());
vvDs.back().resize(childRowNum * childColNum);
INNTER_FOR_BEGIN
if (mxGetString(pChildCell, strBuf, STRING_BUF_SIZE) != 0) {
cout << "String is too large to fit in the buffer! " << i + 1 << '\t' << j + 1 << endl;
return false;
}
vvDs.back()[ii * childColNum + jj] = strBuf;
auto& lastStr = vvDs.back()[ii * childColNum + jj];
transform(lastStr.begin(), lastStr.end(), lastStr.begin(), ::toupper); // 转成大写
INNTER_FOR_END
OUTER_FOR_END
// 读取fr数值
pMxArray = mxGetField(pMxG, 0, secondChildName.c_str()); // fr
OUTER_FOR_BEGIN
vvFr.push_back(vector<double>());
vvFr.back().resize(childRowNum * childColNum);
double *pVal = (double*)mxGetData(pCell); //获取指针
TRANS_ROW_COL(vvFr.back(), pVal, childRowNum, childColNum); // 行列存储方式转换
OUTER_FOR_END
// 没考虑完全哪些数据需要mxDestroyArray可能会有内存泄漏
return true;
}
/* 处理一个知识颗粒 */
struct EntropyResult { // 存放每个文献对应的结果
vector<vector<double> > vvEntropy; // 信息熵
vector<vector<double> > vvTransEntropy; // 转置的信息熵
};
struct ThreadParam { // 线程参数
fs::path matFilePath;
vector<unordered_set<string> >* pvusWord;
EntropyResult* pRes;
};
void ThreadProcessData(const ThreadParam& param) {
const fs::path& matFilePath = param.matFilePath;
EntropyResult& res = *param.pRes;
vector <unordered_set<string> >& vusWord = *param.pvusWord;
// 存放结果
auto& hs = res.vvEntropy;
auto& hr = res.vvTransEntropy;
vector<vector<string> > vvDs; // 每个知识颗粒的ds矩阵词汇矩阵
vector<vector<double> > vvFr; // 词汇对应的频率
// cout << matFilePath.string() << endl;
// 读取G结构体中的ds和fr信息
ReadInfoFromMat(matFilePath.string(), vvDs, vvFr);
// res.vvEntropy.push_back(vvFr[0]);
// cout << vvDs.size() << '\t' << vvDs[0].size() << endl;
const int numLiterature = vusWord.size(); // pubmed 文件中包含的文献数量
const int numGroup = vvDs.size(); // ds包含的组数
hs.resize(numGroup);
hr.resize(numLiterature);
for (int i = 0; i < numGroup; ++i) hs[i].resize(numLiterature); // resize会自动初始化
for (int i = 0; i < numLiterature; ++i) hr[i].resize(numGroup);
for (int groupIdx = 0; groupIdx < vvDs.size(); ++groupIdx) { // 遍历知识颗粒中的每一组
vector<string>& vDs = vvDs[groupIdx]; // 这一组ds
vector<double>& vFr = vvFr[groupIdx]; // frequency
const int numWord = vDs.size(); // 这一组数据中包含的单词数量
vector<vector<int> > vX(numLiterature, vector<int>(numWord, 0));
// 检查知识颗粒中的词语是否出现在pubmed摘要的词语中
for (int i= 0; i < numLiterature; ++i) {
for (int j = 0; j < numWord; ++j) {
if (vusWord[i].find(vDs[j]) != vusWord[i].end()) { // 这一组单词中的j索引位置的单词在第i个文献中出现过
vX[i][j] = 1;
// 对每个知识颗粒每一组数据,计算信息熵
hs[groupIdx][i] -= vFr[j] * log2(vFr[j]);
}
}
}
// cout << vX[0][0] << endl;
for (int i = 0; i < numLiterature; ++i) {
if (vX[groupIdx][i] == 1) {
}
}
// 找最高频词汇所在的索引位置
}
}
/* 程序入口 */
void CalcEntropy(int argc, const char** argv) {
// argv
// 1. 知识颗粒的父目录名称
// 2. 包含高频词汇信息的mat文件的后缀
// 3. 包含处理后的pubmed文献信息的mat文件路径
// 4. 存放输出结果的mat文件的后缀每个知识颗粒目录中生成一个结果文件
// 5. 线程数量(可选)
if (argc < 5) {
cout << "This program should take at least 4 arguments(1.parrent Dir; 2. mat file suffix; 3. pubmed mat file; 4. out mat filename; [5. thread number])!" << endl;
return;
}
clock_t begin, finish;
string parrentDir(argv[1]); // 知识颗粒的父目录名称
string wordMatSuffix(argv[2]); // 高频词汇矩阵对应的mat文件的后缀名可以是全文件名可以是文件名后缀必须保证唯一
int numThread = 1;
if (argc >= 5) numThread = atoi(argv[5]);
if (numThread < 1) numThread = 1;
// cout << "thread num: " << numThread << endl;
/* 读入处理后的pubmed文献信息的mat文件只读入摘要信息即变量abs1 */
vector<string> vAbstract;
int rowNum, colNum;
ReadMtxString(argv[3], "abs1", vAbstract, &rowNum, &colNum);
if (vAbstract.size() == 0) { // 摘要信息为空,出错
cout << "PubMed Abstract info is null!" << endl;
return;
}
// 将摘要信息分割成一个一个的词汇
begin = clock();
unordered_set<char> usWordChars; // 能组成单词的字符要不要考虑数字原版matlab是提取了数字的
for (int i = 65; i <= 90; i++) usWordChars.insert(char(i)); // A - Z
for (int i = 97; i <= 122; i++) usWordChars.insert(char(i)); // a - z
vector<vector<string> > vvWordMtx(vAbstract.size()); // 初始大小为文章的个数
vector<unordered_set<string> > vusAbsWord(vAbstract.size()); // 将每篇文章摘要的单词放入hash表
for (int i = 0; i < vAbstract.size(); i++) {
auto& strAbs = vAbstract[i];
// 遍历摘要字符串的每一个字符,取出每一个单词
vector<string>& vWord = vvWordMtx[i];
if (strAbs.size() == 0) continue; // 摘要信息为空,跳过(一般不会出现这个情况)
int wordStartPos = 0;
while (wordStartPos < strAbs.size() && usWordChars.find(strAbs[wordStartPos]) == usWordChars.end())
wordStartPos++;
for (int curPos = wordStartPos + 1; curPos < strAbs.size(); ++curPos) {
if (usWordChars.find(strAbs[curPos]) == usWordChars.end()) { // 找到了分割符
vWord.push_back(strAbs.substr(wordStartPos, curPos - wordStartPos));
wordStartPos = curPos + 1; // 找下一个词语起始位置
while (wordStartPos < strAbs.size() && usWordChars.find(strAbs[wordStartPos]) == usWordChars.end())
wordStartPos++;
curPos = wordStartPos; // 循环会自动加1
}
}
// 将处理摘要之后的每个词语放入hash表
for (auto& word : vWord) {
string upWord(word);
transform(upWord.begin(), upWord.end(), upWord.begin(), ::toupper);
// cout << upWord << endl;
vusAbsWord[i].insert(upWord);
}
}
finish = clock();
cout << "abstract time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
//auto & vTest = vvWordMtx[0];
//cout << vTest.size() << endl;
//for (auto& str : vTest) cout << str << endl;
/* 遍历所有的知识颗粒目录,逐一进行处理 */
begin = clock();
// ThreadPool thPool(numThread);
ThreadPool thPool(24);
// 查看知识颗粒数量
int numKnowledgeParticle = 0;
FOREACH_PARTICLE_START
numKnowledgeParticle++;
FOREACH_PARTICLE_END
vector<EntropyResult> vEntropyResult(numKnowledgeParticle); // 存放所有结果
// 遍历每个知识颗粒,逐一进行处理
for (int round = 0; round < 1; ++round) { // 测试用
int i = 0;
FOREACH_PARTICLE_START
ThreadParam tParam = { file, &vusAbsWord, &vEntropyResult[i] };
thPool.enqueue(ThreadProcessData, tParam);
i++;
FOREACH_PARTICLE_END
}
// synchronize
thPool.~ThreadPool();
finish = clock();
cout << "thread pool time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
/* 合并处理结果 */
//ofstream ofs("test_out.txt");
//for (auto& item : vEntropyResult) {
// auto& vvEntropy = item.vvEntropy;
// auto& vVal = vvEntropy[0];
// for (auto& val : vVal) ofs << val << ' ';
// ofs << endl;
//}
//ofs.close();
}

View File

@ -13,5 +13,7 @@
/* 处理pubmed txt文件结果保存在mat文件中 */ /* 处理pubmed txt文件结果保存在mat文件中 */
void ProcessPubmedTxt(int argc, const char** argv); void ProcessPubmedTxt(int argc, const char** argv);
/* 获取pubmed文献中摘要所包含的高频词汇信息并据此计算信息熵 */
void CalcEntropy(int argc, const char** argv);
#endif // !__COMMON_H #endif // !__COMMON_H

View File

@ -21,12 +21,13 @@ int main(int argc, const char** argv) {
return 1; return 1;
} }
/* process pubmed txt file */
if (string(argv[1]) == "ProcessPubmedTxt") { if (string(argv[1]) == "ProcessPubmedTxt") {
/* process pubmed txt file */
ProcessPubmedTxt(argc - 1, argv + 1); ProcessPubmedTxt(argc - 1, argv + 1);
} }
else if (string(argv[1]) == "ProcessPubmedTxt") { else if (string(argv[1]) == "CalcEntropy") {
/* 计算信息熵 */
CalcEntropy(argc - 1, argv + 1);
} }
finish = clock(); finish = clock();
cout << argv[1] << " time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl; cout << argv[1] << " time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;

View File

@ -69,6 +69,8 @@ bool SavePubmed(const string& matPath,
return true; return true;
} }
// 命令行参数示例
// ProcessPubmedTxt d:\Twirls\gat1\literatures\pubmed_tag.mat D:\Twirls\runtime\negatives\pubmed-multiplesc-set.txt d:\pubmed_txt.mat
/* /*
pubmed txttagtag pubmed txttagtag
1. pubmed tags, tags'-'' 'tag 1. pubmed tags, tags'-'' 'tag
@ -79,11 +81,14 @@ bool SavePubmed(const string& matPath,
void ProcessPubmedTxt(int argc, const char** argv) { void ProcessPubmedTxt(int argc, const char** argv) {
// argv 1.pubmed tag.mat文件; 2.pubmed article.txt文件; 3.pubmed out.mat输出文件 // argv 1.pubmed tag.mat文件; 2.pubmed article.txt文件; 3.pubmed out.mat输出文件
// //
// cout << argc << '\t' << argv[1] << endl; if (argc != 4) {
cout << "This program should take 3 arguments(1.pubmed tag.mat; 2. pubmed article.txt; 3. pubmed out.mat)!" << endl;
return;
}
int rowNum, colNum; int rowNum, colNum;
vector<string> vTg; vector<string> vTg;
vector<string> vTgName; vector<string> vTgName;
// unordered_map<string, vector<string> > umTagVal;
vector<unordered_map<string, string> > vumPaperTagVal; vector<unordered_map<string, string> > vumPaperTagVal;
unordered_map<string, string> umFullTagToTag; // 完整tag与tag的映射如“PMID- ”“PMID” unordered_map<string, string> umFullTagToTag; // 完整tag与tag的映射如“PMID- ”“PMID”
/* 读取pubmed tags */ /* 读取pubmed tags */
@ -91,7 +96,6 @@ void ProcessPubmedTxt(int argc, const char** argv) {
/* 1. 去掉tags里的'-'和' '字符得到纯净的tag */ /* 1. 去掉tags里的'-'和' '字符得到纯净的tag */
vTgName = vTg; vTgName = vTg;
for (int i = 0; i < vTg.size(); ++i) { for (int i = 0; i < vTg.size(); ++i) {
// cout << vTg[i] << '\t';
int pos = 0; int pos = 0;
for (int j = 0; j < vTg[i].size(); ++j) { for (int j = 0; j < vTg[i].size(); ++j) {
if (vTg[i][j] != ' ' && vTg[i][j] != '-') { // 去掉tag中的空格和'-'字符生成tag name if (vTg[i][j] != ' ' && vTg[i][j] != '-') { // 去掉tag中的空格和'-'字符生成tag name
@ -100,7 +104,6 @@ void ProcessPubmedTxt(int argc, const char** argv) {
} }
vTgName[i].resize(pos); vTgName[i].resize(pos);
umFullTagToTag[vTg[i]] = vTgName[i]; umFullTagToTag[vTg[i]] = vTgName[i];
// cout << vTg[i].size() << '\t' << vTgName[i].size() << endl;
} }
/* 2. 读取pubmed txt文件先读入后处理 */ /* 2. 读取pubmed txt文件先读入后处理 */
@ -130,13 +133,10 @@ void ProcessPubmedTxt(int argc, const char** argv) {
vLineTag.push_back(fullTag); vLineTag.push_back(fullTag);
curPos++; curPos++;
} }
// cout << strLine << endl;
} }
// cout << vStrPubmedTxt.size() << endl;
vPaperStartIdx.push_back(curPos); // 比文章多1最后一个记录结束位置 vPaperStartIdx.push_back(curPos); // 比文章多1最后一个记录结束位置
/* 处理每一篇文章 */ /* 处理每一篇文章 */
ofstream testOfs("pubmed_test-1.txt");
for (int i = 0; i < vPaperStartIdx.size() - 1; ++i) { for (int i = 0; i < vPaperStartIdx.size() - 1; ++i) {
int startIdx = vPaperStartIdx[i]; int startIdx = vPaperStartIdx[i];
int endIdx = vPaperStartIdx[i + 1]; int endIdx = vPaperStartIdx[i + 1];
@ -191,17 +191,6 @@ void ProcessPubmedTxt(int argc, const char** argv) {
abstractStr = (*itr)[titleTag] + " " + abstractStr; // 可能会有性能损失,不过影响不大 abstractStr = (*itr)[titleTag] + " " + abstractStr; // 可能会有性能损失,不过影响不大
} }
//for (int tgIdx = 0; tgIdx < vTgName.size(); ++tgIdx) {
// for (int i = 0; i < vumPaperTagVal.size(); ++i) {
// testOfs << vumPaperTagVal[i][vTgName[tgIdx]] << endl;
// }
//}
for (int i = 0; i < vumPaperTagVal.size(); ++i) {
testOfs << vumPaperTagVal[i][abstractTag] << endl;
}
testOfs.close();
// cout << "文件个数:" << vumPaperTagVal.size() << endl;
// for (auto num : vPaperStartIdx) cout << num << endl;
ifsPubmedTxt.close(); ifsPubmedTxt.close();
/* 将处理后的数据写入mat文件mat中的变量名称分别为Tx和abs1 */ /* 将处理后的数据写入mat文件mat中的变量名称分别为Tx和abs1 */

View File

@ -0,0 +1,21 @@
0.1 0.1 0.1 0.2 0.7 0.1 0.8 0.4 0.1 0.1 0.1 0.2 0.1 0.6 0.5 0.1 0.1 0.1 0.3 0.3 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.2 0.2 0.2 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.5 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.5 0.4 0.5 0.2 0.1 0.2 0.8 0.1 0.2 0.8 0.3
0.1 0.1 0.1 0.9 0.7 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.2 0.1 0.1
0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.8 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.6 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1
0.3 0.5 0.1 0.1 0.1 0.1 0.3 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.3 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 1 1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.4 0.1 0.3 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.8 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.4 0.7 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1
0.3 0.1 0.1 0.1 0.9 0.1 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.4 0.3 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.9 0.4 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.4 0.1 0.2 0.1 0.1
0.4 0.5 0.8 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.3 0.2 0.5 0.3 0.2 0.5 0.3 0.2 0.1 0.4 0.3 0.1 0.1 0.5 0.3 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.5 0.1 0.2 0.1 0.2 0.2 0.1 0.4 0.1 0.2 0.6 0.2 0.1 0.3 0.1
0.1 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.4 0.5 0.5 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.5 0.3 0.2 0.1 0.4 0.1 0.3 0.6 0.2 0.3 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.4 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.5 0.2 0.3 0.9 0.3 0.5 0.2 0.4 0.1 0.1 0.4 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.5 0.1 0.4 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.3 0.1 0.5 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.2 0.2 0.1 0.3
0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.7 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.2 0.4 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1
0.1 0.2 0.9 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.3 0.1 0.2 0.5 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.6 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.6 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.9 0.2 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.2 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.4 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.6 0.4 0.4 0.1 0.1 0.1
0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.9 0.5 0.3 0.1 0.1 0.1 0.1 0.5 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.2 0.1
0.1 0.1 0.1 0.1 0.4 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.8 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.9 0.1 0.2 0.1 0.1 0.2 0.2 0.2 0.5 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.9 0.1 0.1 1 0.4 0.1 0.6 0.1 0.1 0.1 0.7 0.3 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.4 0.1 0.1 0.1 0.1 0.2 0.1 0.4 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.9 0.1 0.1 0.2 0.1 0.5 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
0.3 0.1 0.9 0.1 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.4 0.4 0.1 0.2 0.9 0.2 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.6 0.1 0.1 0.4 0.4 0.1 0.1 0.4 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.3 0.4 0.1 0.2 0.1 0.1 0.2 0.1 0.2
0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.1 0.2 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.2 0.6 0.2 0.1 0.6 0.2 0.1 0.1 0.2 0.1 0.2 0.7 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.2 0.1 0.5 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.5 0.4 0.2 0.1 0.1 0.1 0.2 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.2 0.2 0.1 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.4 0.6 0.1 0.1 0.1 0.2 0.1 0.3 0.7 0.3 0.3 0.2 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.6 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.1 0.3 0.6 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.5 0.1 0.2 0.2 0.1 0.3 0.2 0.2 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.9 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.6 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.3 0.4 0.1 0.2 0.5 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.9 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.7 0.1 0.1 0.5 0.1 0.2 0.2 0.1 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.9 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.2 0.8 0.3 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1
0.3 0.4 0.2 0.1 0.1 0.9 0.3 0.1 0.9 0.1 0.1 0.5 0.1 0.1 0.8 0.2 0.1 0.3 0.1 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.5 0.4 0.2 0.2 0.2 0.1 0.1 0.1 0.2 0.3 0.3 0.2 0.1 0.1 0.2 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.9 0.6 0.1 0.1 0.1 0.3 0.5 0.2 0.1 0.5 0.2 0.2 0.1 0.1 0.2 0.1 0.6 0.7 0.1 0.1 0.4 0.6 0.7 0.4 0.3 0.4 0.1 0.9 0.3 0.1 0.1 0.1 0.3 0.3 0.2 0.3 0.4 0.2 0.1 0.4 0.1 0.3 0.1 0.1 0.5 0.1 0.7 0.1 0.5 0.2 0.1 0.2 0.1 0.1 0.1 0.5 0.2 0.8 0.2 0.1 0.2 0.1 0.1 0.3 0.2 0.4 0.2 0.1 0.5 0.2 0.1 0.1 0.2 0.2 0.2 0.1
0.2 0.2 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.6 0.1 0.3 0.1 0.5 0.1 0.1 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.2 0.4 0.1 0.1 0.4 0.3 0.1 0.1 0.1 0.2 0.4 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.2 0.2 0.2 0.1 0.2 0.3 0.1 0.1 0.2 0.2 0.3 0.3 0.1 0.1 0.1 0.2 0.2 0.3 0.2 0.2 0.3 0.4 0.1 0.2 0.1 0.4 0.3 0.4 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.4 0.1 0.1 0.6 0.2 0.3 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.3 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.2 0.1 0.1 0.2 0.8 0.3 0.2 0.1 0.1 0.2 0.1 0.2 0.2 0.3 0.1 0.2 0.1 0.1 0.3 0.1 0.2 0.2 0.2 0.2 0.4 0.2 0.5 0.1 0.1 0.1 0.2 0.1 0.9 0.1 0.3 0.4 0.1 0.1 0.2 0.1 0.1 0.8 0.4 0.1 0.1 0.2 0.3 0.9
0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.7 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.4 0.2 0.1 0.6 0.1 0.1 0.2 0.2 0.1 0.2

View File

@ -0,0 +1,21 @@
0.1 0.1 0.1 0.2 0.7 0.1 0.8 0.4 0.1 0.1 0.1 0.2 0.1 0.6 0.5 0.1 0.1 0.1 0.3 0.3 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.2 0.2 0.2 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.5 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.5 0.4 0.5 0.2 0.1 0.2 0.8 0.1 0.2 0.8 0.3
0.1 0.1 0.1 0.9 0.7 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.2 0.1 0.1
0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.8 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.6 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1
0.3 0.5 0.1 0.1 0.1 0.1 0.3 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.3 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 1 1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.4 0.1 0.3 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.8 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.4 0.7 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1
0.3 0.1 0.1 0.1 0.9 0.1 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.4 0.3 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.9 0.4 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.4 0.1 0.2 0.1 0.1
0.4 0.5 0.8 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.3 0.2 0.5 0.3 0.2 0.5 0.3 0.2 0.1 0.4 0.3 0.1 0.1 0.5 0.3 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.5 0.1 0.2 0.1 0.2 0.2 0.1 0.4 0.1 0.2 0.6 0.2 0.1 0.3 0.1
0.1 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.4 0.5 0.5 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.5 0.3 0.2 0.1 0.4 0.1 0.3 0.6 0.2 0.3 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.4 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.5 0.2 0.3 0.9 0.3 0.5 0.2 0.4 0.1 0.1 0.4 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.5 0.1 0.4 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.3 0.1 0.5 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.2 0.2 0.1 0.3
0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.7 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.2 0.4 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1
0.1 0.2 0.9 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.3 0.1 0.2 0.5 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.6 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.6 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.9 0.2 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.2 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.4 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.6 0.4 0.4 0.1 0.1 0.1
0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.9 0.5 0.3 0.1 0.1 0.1 0.1 0.5 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.2 0.1
0.1 0.1 0.1 0.1 0.4 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.8 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.9 0.1 0.2 0.1 0.1 0.2 0.2 0.2 0.5 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.1 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.9 0.1 0.1 1 0.4 0.1 0.6 0.1 0.1 0.1 0.7 0.3 0.3 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.4 0.1 0.1 0.1 0.1 0.2 0.1 0.4 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.9 0.1 0.1 0.2 0.1 0.5 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
0.3 0.1 0.9 0.1 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.4 0.4 0.4 0.1 0.2 0.9 0.2 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.6 0.1 0.1 0.4 0.4 0.1 0.1 0.4 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.3 0.4 0.1 0.2 0.1 0.1 0.2 0.1 0.2
0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.1 0.2 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.3 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.2 0.6 0.2 0.1 0.6 0.2 0.1 0.1 0.2 0.1 0.2 0.7 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.2 0.1 0.5 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.5 0.4 0.2 0.1 0.1 0.1 0.2 0.3 0.4 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.2 0.2 0.1 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.4 0.6 0.1 0.1 0.1 0.2 0.1 0.3 0.7 0.3 0.3 0.2 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.4 0.6 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.1 0.2 0.2 0.2 0.1 0.1 0.2 0.1 0.1 0.1 0.3 0.1 0.3 0.6 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.2 0.5 0.1 0.2 0.2 0.1 0.3 0.2 0.2 0.2 0.1 0.2 0.1 0.1 0.2 0.1 0.2 0.1 0.1 0.3 0.1 0.1 0.1 0.1
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.9 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.2 0.1 0.2 0.1 0.1 0.1 0.6 0.3 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.3 0.4 0.1 0.2 0.5 0.1 0.1 0.1 0.6 0.2 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.9 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.5 0.1 0.7 0.1 0.1 0.5 0.1 0.2 0.2 0.1 0.1 0.3 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.9 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.2 0.8 0.3 0.1 0.1 0.9 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.1
0.3 0.4 0.2 0.1 0.1 0.9 0.3 0.1 0.9 0.1 0.1 0.5 0.1 0.1 0.8 0.2 0.1 0.3 0.1 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.1 0.2 0.1 0.1 0.2 0.1 0.1 0.5 0.4 0.2 0.2 0.2 0.1 0.1 0.1 0.2 0.3 0.3 0.2 0.1 0.1 0.2 0.4 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 0.9 0.6 0.1 0.1 0.1 0.3 0.5 0.2 0.1 0.5 0.2 0.2 0.1 0.1 0.2 0.1 0.6 0.7 0.1 0.1 0.4 0.6 0.7 0.4 0.3 0.4 0.1 0.9 0.3 0.1 0.1 0.1 0.3 0.3 0.2 0.3 0.4 0.2 0.1 0.4 0.1 0.3 0.1 0.1 0.5 0.1 0.7 0.1 0.5 0.2 0.1 0.2 0.1 0.1 0.1 0.5 0.2 0.8 0.2 0.1 0.2 0.1 0.1 0.3 0.2 0.4 0.2 0.1 0.5 0.2 0.1 0.1 0.2 0.2 0.2 0.1
0.2 0.2 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.3 0.1 0.2 0.1 0.6 0.1 0.3 0.1 0.5 0.1 0.1 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.6 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.4 0.2 0.2 0.4 0.1 0.1 0.4 0.3 0.1 0.1 0.1 0.2 0.4 0.1 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.3 0.2 0.2 0.2 0.2 0.1 0.2 0.3 0.1 0.1 0.2 0.2 0.3 0.3 0.1 0.1 0.1 0.2 0.2 0.3 0.2 0.2 0.3 0.4 0.1 0.2 0.1 0.4 0.3 0.4 0.1 0.1 0.1 0.4 0.1 0.1 0.1 0.4 0.1 0.1 0.6 0.2 0.3 0.1 0.2 0.2 0.2 0.2 0.1 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.6 0.3 0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.2 0.1 0.1 0.2 0.8 0.3 0.2 0.1 0.1 0.2 0.1 0.2 0.2 0.3 0.1 0.2 0.1 0.1 0.3 0.1 0.2 0.2 0.2 0.2 0.4 0.2 0.5 0.1 0.1 0.1 0.2 0.1 0.9 0.1 0.3 0.4 0.1 0.1 0.2 0.1 0.1 0.8 0.4 0.1 0.1 0.2 0.3 0.9
0.1 0.1 0.1 0.1 0.2 0.4 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.7 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.2 0.4 0.2 0.1 0.6 0.1 0.1 0.2 0.2 0.1 0.2

View File

@ -118,7 +118,6 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="gmm.h" /> <ClInclude Include="gmm.h" />
<ClInclude Include="kmeans.h" /> <ClInclude Include="kmeans.h" />
<ClInclude Include="thread_pool.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="gmm.cpp" /> <ClCompile Include="gmm.cpp" />

View File

@ -21,9 +21,6 @@
<ClInclude Include="gmm.h"> <ClInclude Include="gmm.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="thread_pool.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="main.cpp"> <ClCompile Include="main.cpp">

View File

@ -30,7 +30,7 @@
#endif #endif
#include <mat.h> #include <mat.h>
#include "gmm.h" #include "gmm.h"
#include "thread_pool.h" #include "CommonLib/thread_pool.h"
#include "CommonLib/matlab_io.h" #include "CommonLib/matlab_io.h"
using namespace std; using namespace std;
using std::cout; using std::cout;
@ -182,14 +182,17 @@ void ThreadProcessData(const ThreadParam& param) {
/* 程序入口 */ /* 程序入口 */
int main(int argc, const char** argv) { int main(int argc, const char** argv) {
if (argc != 5) { if (argc < 4) {
cout << "This program should take 4 arguments(1.parrent Dir; 2. mat file suffix; 3. out mat filename; 4. thread number)!" << endl; cout << "This program take at least 3 arguments(1.parrent Dir; 2. mat file suffix; 3. out mat filename; [4. thread number])!" << endl;
return 1; return 1;
} }
string parrentDir(argv[1]); // 知识颗粒的父目录名称 string parrentDir(argv[1]); // 知识颗粒的父目录名称
string hsMatSuffix(argv[2]); // hs矩阵对应的mat文件的后缀名可以是全文件名可以是文件名后缀必须保证唯一 string hsMatSuffix(argv[2]); // hs矩阵对应的mat文件的后缀名可以是全文件名可以是文件名后缀必须保证唯一
fs::path outFileName(argv[3]); fs::path outFileName(argv[3]);
ThreadPool thPool(8); int numThread = 1;
if (argc >= 4) numThread = atoi(argv[4]);
if (numThread < 1) numThread = 1;
ThreadPool thPool(numThread);
clock_t begin, finish; clock_t begin, finish;
begin = clock(); begin = clock();