重构代码,将公共使用的部分提取出来,完成了pubmed txt的处理逻辑,还没有完成写入mat文件部分

This commit is contained in:
zzh 2023-09-19 11:17:43 +08:00
parent 7ced32b592
commit efac589b58
21 changed files with 310541 additions and 87 deletions

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{c8434373-f2d6-459c-ac6d-79611acef9f5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CommonLib</RootNamespace>
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
<UseDebugLibraries>true</UseDebugLibraries>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="PropertySheet.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
<AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="PropertySheet.props" />
<Text Include="readme.txt">
<DeploymentContent>false</DeploymentContent>
</Text>
</ItemGroup>
<ItemGroup>
<ClInclude Include="matlab_io.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="matlab_io.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets'))" />
</Target>
</Project>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="PropertySheet.props" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Text Include="readme.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="matlab_io.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="matlab_io.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<!--
To customize common C++/WinRT project properties:
* right-click the project node
* expand the Common Properties item
* select the C++/WinRT property page
For more advanced scenarios, and complete documentation, please see:
https://github.com/Microsoft/cppwinrt/tree/master/nuget
-->
<PropertyGroup />
<ItemDefinitionGroup />
</Project>

View File

@ -0,0 +1,116 @@
/*********************************************************************************************
Description: matlab
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/18
***********************************************************************************************/
#include <string>
#include <mat.h>
#include <iostream>
#include <vector>
#include "matlab_io.h"
using namespace std;
/* 读取字符串矩阵 */
bool ReadMtxString(const string& filePath, const string& mtxName,
vector<string>& vStr, int* pRowNum, int* pColNum) {
MATFile* pMatFile = nullptr;
mxArray* pMxArray = nullptr;
mxArray* pCell = nullptr;
int rowNum, colNum;
char strBuf[STRING_BUF_SIZE];
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
if (pMatFile == nullptr) {
cerr << "filePath is error!" << endl;
return false;
}
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
rowNum = (int)mxGetM(pMxArray);
colNum = (int)mxGetN(pMxArray);
vStr.resize(rowNum * colNum);
for (int i = 0; i < rowNum; ++i) {
for (int j = 0; j < colNum; ++j) {
pCell = mxGetCell(pMxArray, j * rowNum + i);
if (mxGetString(pCell, strBuf, STRING_BUF_SIZE) != 0) {
cerr << "String is too large to fit in the buffer! " << i + 1 << '\t' << j + 1 << endl;
return false;
}
vStr[i * colNum + j] = strBuf;
}
}
return true;
}
/* 从mat文件中读取给定名称的矩阵数据并获取矩阵的行列数值 */
T* ReadMtxDouble(const string& filePath, const string& mtxName, int* pRowNum, int* pColNum) {
T* dst = nullptr;
MATFile* pMatFile = nullptr;
mxArray* pMxArray = nullptr;
int rowNum, colNum;
double* matData;
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
if (pMatFile == nullptr) {
cerr << "filePath is error!" << endl;
return nullptr;
}
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
rowNum = (int)mxGetM(pMxArray);
colNum = (int)mxGetN(pMxArray);
// cout << rowNum << " " << colNum << endl;
matData = (double*)mxGetData(pMxArray); //获取指针
dst = new T[rowNum * colNum];
for (int i = 0; i < rowNum; ++i) {
for (int j = 0; j < colNum; ++j) {
dst[i * colNum + j] = T(matData[j * rowNum + i]);
}
}
mxDestroyArray(pMxArray); //释放内存
matClose(pMatFile); // 关闭文件
*pRowNum = rowNum;
*pColNum = colNum;
return dst;
}
/* 将数据写入mat文件中用给定的名称命名 */
bool SaveMtxDouble(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum)
{
//转置存储
int datasize = colNum * rowNum;
double* mtxData = new double[datasize];//待存储数据转为double格式
// memset(mtxData, 0, datasize * sizeof(double));
if (pMatFile == nullptr)
{
cerr << "mat file pointer is error!" << endl;
return false;
}
for (int i = 0; i < rowNum; i++)
{
for (int j = 0; j < colNum; j++)
{
mtxData[j * rowNum + i] = double(src[i * colNum + j]);
// *(mtxData + j * rowNum + i) = (double)src[i * colNum + j]; 可消除警告
}
}
mxArray* pWriteArray = NULL;//matlab格式矩阵
//创建一个rowNum*colNum的矩阵
pWriteArray = mxCreateDoubleMatrix(rowNum, colNum, mxREAL);
//把data的值赋给pWriteArray指针
memcpy((void*)(mxGetPr(pWriteArray)), (void*)mtxData, sizeof(double) * datasize);
//给矩阵命名为matrixName
matPutVariable(pMatFile, matrixName.c_str(), pWriteArray);
mxDestroyArray(pWriteArray);//release resource
delete[]mtxData;//release resource
return true;
}

View File

@ -0,0 +1,34 @@
/*********************************************************************************************
Description: matlab
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/18 adfasdf
***********************************************************************************************/
#ifndef __MATLAB_IO_H
#define __MATLAB_IO_H
#include <string>
#include <mat.h>
#include <vector>
using namespace std;
#define STRING_BUF_SIZE 10240
typedef double T;
/*
*/
/* 读取字符串矩阵 */
bool ReadMtxString(const string& filePath, const string& mtxName, vector<string>& vStr, int* pRowNum, int* pColNum);
/* 从mat文件中读取给定名称的矩阵数据并获取矩阵的行列数值 */
T* ReadMtxDouble(const string& filePath, const string& mtxName, int* pRowNum, int* pColNum);
/* 将数据写入mat文件中用给定的名称命名 */
bool SaveMtxDouble(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum);
#endif

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.210806.1" targetFramework="native" />
</packages>

View File

@ -0,0 +1,30 @@
========================================================================
C++/WinRT CommonLib Project Overview
========================================================================
This project demonstrates how to get started consuming Windows Runtime
classes directly from standard C++, using platform projection headers
generated from Windows SDK metadata files.
Steps to generate and consume SDK platform projection:
1. Build project initially to generate platform projection headers into
your Generated Files folder.
2. Include a projection namespace header in your pch.h, such as
<winrt/Windows.Foundation.h>.
3. Consume winrt namespace and any Windows Runtime namespaces, such as
winrt::Windows::Foundation, from source code.
4. Initialize apartment via init_apartment() and consume winrt classes.
Steps to generate and consume a projection from third party metadata:
1. Add a WinMD reference by right-clicking the References project node
and selecting "Add Reference...". In the Add References dialog,
browse to the component WinMD you want to consume and add it.
2. Build the project once to generate projection headers for the
referenced WinMD file under the "Generated Files" subfolder.
3. As above, include projection headers in pch or source code
to consume projected Windows Runtime classes.
========================================================================
Learn more about C++/WinRT here:
http://aka.ms/cppwinrt/
========================================================================

View File

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{0e88ff62-c387-44f4-a8b6-3fd3ed0206b6}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CppRun</RootNamespace>
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v143</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
<UseDebugLibraries>true</UseDebugLibraries>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="PropertySheet.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
<AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="common.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="process_pubmed_txt.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="PropertySheet.props" />
<Text Include="readme.txt">
<DeploymentContent>false</DeploymentContent>
</Text>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets'))" />
</Target>
</Project>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="common.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="process_pubmed_txt.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="PropertySheet.props" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Text Include="readme.txt" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<!--
To customize common C++/WinRT project properties:
* right-click the project node
* expand the Common Properties item
* select the C++/WinRT property page
For more advanced scenarios, and complete documentation, please see:
https://github.com/Microsoft/cppwinrt/tree/master/nuget
-->
<PropertyGroup />
<ItemDefinitionGroup />
</Project>

17
CppRun/common.h 100644
View File

@ -0,0 +1,17 @@
/*********************************************************************************************
Description:
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/18 adfasdf
***********************************************************************************************/
#ifndef __COMMON_H
#define __COMMON_H
/* 处理pubmed txt文件结果保存在mat文件中 */
void ProcessPubmedTxt(int argc, const char** argv);
#endif // !__COMMON_H

34
CppRun/main.cpp 100644
View File

@ -0,0 +1,34 @@
/*********************************************************************************************
Description: matlabc++
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/18
***********************************************************************************************/
#include <iostream>
#include <time.h>
#include "common.h"
using namespace std;
/* 程序入口 */
int main(int argc, const char** argv) {
clock_t begin, finish;
begin = clock();
if (argc < 2) {
cerr << "This program take at least 1 arguments(CMD; [Options])!" << endl;
return 1;
}
/* process pubmed txt file */
if (string(argv[1]) == "ProcessPubmedTxt") {
ProcessPubmedTxt(argc - 1, argv + 1);
}
else if (string(argv[1]) == "ProcessPubmedTxt") {
}
finish = clock();
cout << argv[1] << " time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
return 0;
}

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.210806.1" targetFramework="native" />
</packages>

View File

@ -0,0 +1,181 @@
/*********************************************************************************************
Description: pubmedtxtmat
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/18
***********************************************************************************************/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <mat.h>
#include "common.h"
#include "CommonLib/matlab_io.h"
using namespace std;
/* 将结果写入mat文件 */
/* 将数据写入mat文件中用给定的名称命名 */
bool SavePubmed(const string& matPath,
const vector<string> &vTgName,
const vector<unordered_map<string, string> >& vumPaperTagVal)
{
MATFile* pMatFile = matOpen(matPath.c_str(), "r"); //打开.mat文件
if (pMatFile == nullptr) {
cerr << "filePath is error! " << matPath << endl;
return false;
}
vector<const char*> vTgChars;
for (auto strTg : vTgName) {
vTgChars.push_back(strTg.c_str());
}
// 创建结构体数据
mxArray* mxStruct = mxCreateStructMatrix(1, 1, vTgName.size(), vTgChars.data());
return true;
}
/*
pubmed txttagtag
1. pubmed tags, tags'-'' 'tag
2. pubmed txt, tagtag
3. titleabstractabstract
4. mat
*/
void ProcessPubmedTxt(int argc, const char** argv) {
// argv 1.pubmed tag.mat文件; 2.pubmed article.txt文件; 3.pubmed out.mat输出文件
//
// cout << argc << '\t' << argv[1] << endl;
int rowNum, colNum;
vector<string> vTg;
vector<string> vTgName;
// unordered_map<string, vector<string> > umTagVal;
vector<unordered_map<string, string> > vumPaperTagVal;
unordered_map<string, string> umFullTagToTag; // 完整tag与tag的映射如“PMID- ”“PMID”
/* 读取pubmed tags */
ReadMtxString(argv[1], "tg", vTg, &rowNum, &colNum);
/* 1. 去掉tags里的'-'和' '字符得到纯净的tag */
vTgName = vTg;
for (int i = 0; i < vTg.size(); ++i) {
// cout << vTg[i] << '\t';
int pos = 0;
for (int j = 0; j < vTg[i].size(); ++j) {
if (vTg[i][j] != ' ' && vTg[i][j] != '-') { // 去掉tag中的空格和'-'字符生成tag name
vTgName[i][pos++] = vTg[i][j];
}
}
vTgName[i].resize(pos);
umFullTagToTag[vTg[i]] = vTgName[i];
// cout << vTg[i].size() << '\t' << vTgName[i].size() << endl;
}
/* 2. 读取pubmed txt文件先读入后处理 */
ifstream ifsPubmedTxt(argv[2]);
vector<string> vStrPubmedTxt;
vector<string> vLineTag;
vector<int> vPaperStartIdx;
string blankTag = " "; // 5个空格
string strLine;
string fullTag;
int curPos = 0;
vPaperStartIdx.push_back(curPos); // 添加初始索引
const int FULL_TAG_LEN = 5;
while (getline(ifsPubmedTxt, strLine)) { // 读取内容时候去掉了行尾的换行符
while (strLine.back() == ' ') strLine.pop_back(); // 去掉行尾的空格
if (strLine.size() == 0) { // 新的paper
vPaperStartIdx.push_back(curPos);
continue;
}
fullTag = strLine.substr(0, 5);
if (fullTag == blankTag) { // 这一行的内容还是属于上一个tag的
string& lastTagConteng = vStrPubmedTxt.back();
lastTagConteng.append(strLine.substr(FULL_TAG_LEN)); // 最前边包含了一个空格
}
else {
vStrPubmedTxt.push_back(strLine.substr(FULL_TAG_LEN));
vLineTag.push_back(fullTag);
curPos++;
}
// cout << strLine << endl;
}
// cout << vStrPubmedTxt.size() << endl;
vPaperStartIdx.push_back(curPos); // 比文章多1最后一个记录结束位置
/* 处理每一篇文章 */
ofstream testOfs("pubmed_test-1.txt");
for (int i = 0; i < vPaperStartIdx.size() - 1; ++i) {
int startIdx = vPaperStartIdx[i];
int endIdx = vPaperStartIdx[i + 1];
unordered_map<string, string> umTagContent;
for (int tgIdx = 0; tgIdx < vTgName.size(); ++tgIdx) {
umTagContent[vTgName[tgIdx]] = ""; // 对每一个tag设置一个新的string
}
for (int idx = startIdx; idx < endIdx; ++idx) { // 遍历当前文章的每一个tag内容
string& fullTag = vLineTag[idx];
auto tagItr = umFullTagToTag.find(fullTag);
if (tagItr != umFullTagToTag.end()) { // 找到tag了
const string& tag = tagItr->second;
string& tagContent = umTagContent[tag];
tagContent.append(vStrPubmedTxt[idx]);
}
}
vumPaperTagVal.push_back(umTagContent);
}
cout << "文件个数:" << vumPaperTagVal.size() << endl;
/* 去除没有摘要的文章 */
const string abstractTag = "AB";
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); ) {
if ((*itr)[abstractTag].size() == 0) {
itr = vumPaperTagVal.erase(itr);
}
else {
itr++;
}
}
/* 根据PMID去除冗余 */
unordered_map<string, int> umPMID;
const string pmidTag = "PMID";
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); ) {
if (umPMID.find((*itr)[pmidTag]) != umPMID.end()) {
cout << "duplicate " << (*itr)[pmidTag] << endl;
itr = vumPaperTagVal.erase(itr);
}
else {
umPMID[(*itr)[pmidTag]] = 1;
itr++;
}
}
/* 将title和abstract合并赋值给abstract */
const string titleTag = "TI";
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); itr++) {
string& abstractStr = (*itr)[abstractTag];
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();
/* 将处理后的数据写入mat文件mat中的变量名称分别为Tx和abs1 */
SavePubmed(argv[3], vTgName, vumPaperTagVal);
}

File diff suppressed because one or more lines are too long

305240
CppRun/pubmed_test.txt 100644

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
用c++程序重写matlab中比较耗时的部分

View File

@ -64,7 +64,8 @@
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
@ -75,19 +76,24 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;D:\apps\Twirls\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libmat.lib;libmx.lib;libmex.lib;libeng.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
@ -95,15 +101,18 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;D:\apps\Twirls\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libmat.lib;libmx.lib;libmex.lib;libeng.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@ -1,3 +1,12 @@
/*********************************************************************************************
Description: 线
Copyright : All right reserved by ZheYuan.BJ
Author : Zhang Zhonghai
Date : 2023/09/12
***********************************************************************************************/
#include <iostream>
#include <iomanip>
#include <fstream>
@ -22,80 +31,12 @@
#include <mat.h>
#include "gmm.h"
#include "thread_pool.h"
#include "CommonLib/matlab_io.h"
using namespace std;
using std::cout;
using std::vector;
namespace fs = std::filesystem;
/* 从mat文件中读取给定名称的矩阵数据并获取矩阵的行列数值 */
template<typename T>
T* ReadMatlabMat(const string &filePath, const string &mtxName, int *pRowNum, int *pColNum) {
T* dst = nullptr;
MATFile* pMatFile = nullptr;
mxArray* pMxArray = nullptr;
int rowNum, colNum;
double* matData;
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
if (pMatFile == nullptr) {
cerr << "filePath is error!" << endl;
return nullptr;
}
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
rowNum = mxGetM(pMxArray);
colNum = mxGetN(pMxArray);
// cout << rowNum << " " << colNum << endl;
matData = (double*)mxGetData(pMxArray); //获取指针
dst = new T[rowNum * colNum];
for (int i = 0; i < rowNum; ++i) {
for (int j = 0; j < colNum; ++j) {
dst[i * colNum + j] = T(matData[j * rowNum + i]);
}
}
mxDestroyArray(pMxArray); //释放内存
matClose(pMatFile); // 关闭文件
*pRowNum = rowNum;
*pColNum = colNum;
return dst;
}
/* 将数据写入mat文件中用给定的名称命名 */
template<typename T>
bool SaveMatrix(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum)
{
//转置存储
int datasize = colNum * rowNum;
double* mtxData = new double[datasize];//待存储数据转为double格式
// memset(mtxData, 0, datasize * sizeof(double));
for (int i = 0; i < rowNum; i++)
{
for (int j = 0; j < colNum; j++)
{
mtxData[j * rowNum + i] = double(src[i * colNum + j]);
// *(mtxData + j * rowNum + i) = (double)src[i * colNum + j]; 可消除警告
}
}
mxArray* pWriteArray = NULL;//matlab格式矩阵
if (pMatFile == nullptr)
{
cerr << "mat file pointer is error!" << endl;
return false;
}
//创建一个rowNum*colNum的矩阵
pWriteArray = mxCreateDoubleMatrix(rowNum, colNum, mxREAL);
//把data的值赋给pWriteArray指针
memcpy((void*)(mxGetPr(pWriteArray)), (void*)mtxData, sizeof(double) * datasize);
//给矩阵命名为matrixName
matPutVariable(pMatFile, matrixName.c_str(), pWriteArray);
mxDestroyArray(pWriteArray);//release resource
delete[]mtxData;//release resource
return true;
}
/* 将x向量放到宽度为binWidth大小的桶中功能类似matlab的hist*/
void PutXtoBin(double* x, int xSize, double binWidth, vector<double>& vXBin, vector<double>& vYBin) {
double maxX = 0.0;
@ -131,9 +72,8 @@ struct cmpFunc {
void GMMToFactorEY(GMM& gmm, double binWidth, vector<double> &vYBin, vector<double>& vFactor, vector<double>& vEY) {
/* 需要调整曲线的权重,来拟合高斯曲线,而不是用概率密度 */
double zoomFactorSum = 0.0;
int valNum = 0;
vEY.resize(vYBin.size());
int topM = vYBin.size() / 4;
int topM = (int)(vYBin.size() / 4);
if (topM < 1) topM = 1;
/* 用堆排序的方式取前topM个最大值, 用来计算缩放参数*/
priority_queue<pair<double, double>, vector<pair<double, double> >, cmpFunc> pqTopM;
@ -211,7 +151,7 @@ void ThreadProcessData(const ThreadParam& param) {
int rowNum = 0;
int colNum = 0;
hs = ReadMatlabMat<double>(matFilePath.string(), "hs", &rowNum, &colNum);
hs = ReadMtxDouble(matFilePath.string(), "hs", &rowNum, &colNum);
vector<double>vXBin;
vector<double>vYBin;
@ -224,7 +164,7 @@ void ThreadProcessData(const ThreadParam& param) {
PutXtoBin(hs + i * colNum, colNum, 0.2, vXBin, vYBin);
GMM gmm(1, 2); // 1维 2个高斯模型
gmm.Train(vXBin.data(), vXBin.size());
gmm.Train(vXBin.data(), (int)vXBin.size());
GMMToFactorEY(gmm, 0.2, vYBin, vFactor, vEY);
vDist[i] = CorrelationDistance(vYBin, vEY);
@ -232,15 +172,15 @@ void ThreadProcessData(const ThreadParam& param) {
}
/* 写入matlab文件 */
MATFile* pMatFile = matOpen(outFilePath.string().c_str(), "w");
SaveMatrix<double>(vFactorAll.data(), pMatFile, "factor", rowNum, 6);
SaveMatrix<double>(vDist.data(), pMatFile, "correlation", rowNum, 1);
SaveMtxDouble(vFactorAll.data(), pMatFile, "factor", rowNum, 6);
SaveMtxDouble(vDist.data(), pMatFile, "correlation", rowNum, 1);
matClose(pMatFile);
delete[] hs;
}
/* 程序入口 */
int main(int argc, char** argv) {
int main(int argc, const char** argv) {
if (argc != 5) {
cerr << "This program should take 4 arguments(1.parrent Dir; 2. mat file suffix; 3. out mat filename; 4. thread number)!" << endl;
@ -267,6 +207,6 @@ int main(int argc, char** argv) {
}
thPool.~ThreadPool();
finish = clock();
cout << "Total time:" << (double)(finish - begin) / CLOCKS_PER_SEC << endl;
cout << "GMM Total time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
return 0;
}

View File

@ -141,7 +141,7 @@ int main(int argc, char** argv) {
//cout<<dicr.size()<<endl;
//cout<<wd2.size()<<" "<<wd2[0].size()<<endl;
//cout<<wd1s.size()<<" "<<wd1s[0].size()<<endl;
//#pragma omp parallel for
// #pragma omp parallel for
for (int i = 0; i < loopNum; ++i) {
clock_t begin = clock();
//#pragma omp atomic
@ -174,11 +174,11 @@ int main(int argc, char** argv) {
}
clock_t finish = clock();
double loopTime = (double)(finish - begin) / CLOCKS_PER_SEC;
//cout<<"Loop : "<<i<<" Time consuming :"<<loopTime<<"s"<<endl;
// cout<<"Loop : "<<i<<" Time consuming :"<<loopTime<<"s"<<endl;
}
end = clock();
double endtime = (double)(end - start) / CLOCKS_PER_SEC;
//cout<<"Total time:"<<endtime<<endl;
cout<<"RandSim Total time:"<<endtime << " s" << endl;
txtWriterVvs(Zr, ZrName);
return 0;
}

View File

@ -7,30 +7,71 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GMM", "GMM\GMM.vcxproj", "{
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandSim", "RandSim\RandSim.vcxproj", "{D3A55022-91F5-4DB2-85A6-A25AE12CC840}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppRun", "CppRun\CppRun.vcxproj", "{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}"
ProjectSection(ProjectDependencies) = postProject
{C8434373-F2D6-459C-AC6D-79611ACEF9F5} = {C8434373-F2D6-459C-AC6D-79611ACEF9F5}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "CommonLib\CommonLib.vcxproj", "{C8434373-F2D6-459C-AC6D-79611ACEF9F5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|ARM.ActiveCfg = Debug|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|ARM.Build.0 = Debug|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x64.ActiveCfg = Debug|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x64.Build.0 = Debug|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x86.ActiveCfg = Debug|Win32
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x86.Build.0 = Debug|Win32
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|ARM.ActiveCfg = Release|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|ARM.Build.0 = Release|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x64.ActiveCfg = Release|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x64.Build.0 = Release|x64
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x86.ActiveCfg = Release|Win32
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x86.Build.0 = Release|Win32
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|ARM.ActiveCfg = Debug|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|ARM.Build.0 = Debug|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x64.ActiveCfg = Debug|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x64.Build.0 = Debug|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x86.ActiveCfg = Debug|Win32
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x86.Build.0 = Debug|Win32
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|ARM.ActiveCfg = Release|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|ARM.Build.0 = Release|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x64.ActiveCfg = Release|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x64.Build.0 = Release|x64
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x86.ActiveCfg = Release|Win32
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x86.Build.0 = Release|Win32
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|ARM.ActiveCfg = Debug|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|ARM.Build.0 = Debug|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x64.ActiveCfg = Debug|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x64.Build.0 = Debug|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x86.ActiveCfg = Debug|Win32
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x86.Build.0 = Debug|Win32
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|ARM.ActiveCfg = Release|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|ARM.Build.0 = Release|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x64.ActiveCfg = Release|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x64.Build.0 = Release|x64
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x86.ActiveCfg = Release|Win32
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x86.Build.0 = Release|Win32
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|ARM.ActiveCfg = Debug|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|ARM.Build.0 = Debug|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x64.ActiveCfg = Debug|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x64.Build.0 = Debug|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x86.ActiveCfg = Debug|Win32
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x86.Build.0 = Debug|Win32
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|ARM.ActiveCfg = Release|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|ARM.Build.0 = Release|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x64.ActiveCfg = Release|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x64.Build.0 = Release|x64
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x86.ActiveCfg = Release|Win32
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE