小编Gar*_*ngh的帖子

使用C读取.mat文件:如何正确读取单元格结构

我基本上试图在C代码中翻译Matlab代码.这是我上一个问题的延伸.

在Matlab中,我使用了cell-structures哪个持有matrices (double) of variable sizes.这是我的*.mat文件的玩具示例supposed to store:

Matlab代码:

A = [[1 2 3]; [5 7 1]; [3 5 9]];
B = [[2 4];[5 7]];
Creator = 'DKumar';

nFilters = 2;

Filters{1} = [[-1.0 -1.0 -1.0]; [-1.0 8 -1.0]; [-1.0 -1.0 -1.0]];
Filters{2} = 2.0*[[-1.0 -1.0]; [-1.0 8]; [-1.0 -1.0]];

cd('/home/dkumar/CPP_ExampleCodes_DKU/Read_mat_File');
save('Test_FILE.mat', 'A', 'B', 'Creator', 'nFilters', 'Filters');
Run Code Online (Sandbox Code Playgroud)

C代码:功能"matread_Matrix" reads matrices stored in *.mat properly.它的功能"matread_Cell"是应该读取单元结构的not working. …

c matlab

13
推荐指数
1
解决办法
1502
查看次数

Matlab:如何捕捉警告

我在MATLAB中运行一些数据处理工作,求解器使用BACKSLASH运算符.有时,我得到这样的警告:

Warning: Rank deficient, rank = 1390, tol = 1.335195e-010.
Warning: Rank deficient, rank = 1386, tol = 1.333217e-010.
Run Code Online (Sandbox Code Playgroud)

我想抓住那些警告.我正在尝试将警告转换为错误,然后按照标题"陷阱警告"中所述捕获它:http: //undocumentedmatlab.com/blog/trapping-warnings-efficiently 在示例中,以下字符串已用于将警告转换为错误:

s = warning('error', 'MATLAB:DELETE:Permission');
Run Code Online (Sandbox Code Playgroud)

但是,我不确定我的案例使用什么字符串.我试过用

s = warning('error', 'Warning: Rank deficient’);
Run Code Online (Sandbox Code Playgroud)

但是,它没有用.任何帮助,将不胜感激.

问候,DK

matlab warnings

10
推荐指数
2
解决办法
6917
查看次数

gcc:-L和-l选项之间的区别以及如何提供库的完整路径

我是makefile的新手; 所以,如果我的问题很简单,请接受我的道歉.

问题1:-L和-l选项有什么区别.

问题2:您如何提供某些图书馆的完整路径?例如,下面的makefile中提到的"libeng"和"libmx"位于{MATLABROOT}/bin/glnxa64

# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        -L${MATLABROOT}/extern/lib -llibeng -llibmx

clean:
    rm -f engdemo *.o
Run Code Online (Sandbox Code Playgroud)

更新:以下makefile工作原理:

# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        #-L${MATLABROOT}/extern/lib -llibeng -llibmx
    -L${MATLABROOT}/bin/glnxa64 -llibeng \
    -L${MATLABROOT}/bin/glnxa64 -llibmx

clean:
rm -f engdemo *.o
Run Code Online (Sandbox Code Playgroud)

我发现以下关于链接库的链接非常有用:http: //www.cs.swarthmore.edu/~newhall/unixhelp/howto_C_libraries.html

g++

9
推荐指数
1
解决办法
1万
查看次数

Makefile:将C代码转换为mex代码(链接错误)

我有一个C-code which works fine使用makefile.现在,我正在尝试提交convert it to mex文件,以便我可以从Matlab运行它.在这里,我也是using makefile approach.但是,mex的makefile给了我错误.

这是我想要与我的mex文件一起编译的tsnnls lib.

C项目组织:

tsnnls_test_DKU.c
Include_4_TSNNLS.c
Include_4_TSNNLS.h
Run Code Online (Sandbox Code Playgroud)

" Include_4_TSNNLS.*"文件具有TestingLibraries()调用第三部分库的功能; 而我试图保持" tsnnls_test_DKU.c"非常简单,因为:

原始代码:tsnnls_test_DKU.c

int TestingLibraries() ;

int main( int argc, char* argv[] ) 
{

    int k = TestingLibraries() ;
    return(1);
}
Run Code Online (Sandbox Code Playgroud)

现在,代码已更改:

更改的代码:tsnnls_test_DKU.c:

#include "mex.h"
#include <math.h>

int TestingLibraries() ;

void mexFunction (int nlhs, mxArray *plhs[],  int nrhs, const mxArray *prhs[]) {

    int k = TestingLibraries() ;

}
Run Code Online (Sandbox Code Playgroud)

原始make文件(有效

CXX       = …
Run Code Online (Sandbox Code Playgroud)

c matlab makefile mex

8
推荐指数
1
解决办法
1111
查看次数

makefile:如何链接来自不同子目录的对象文件并包含不同的搜索路径

我想更改我的测试代码的位置(tsnnls_test_DKU.c)无法在makefile中进行更改以正确反映此文件夹更改.一些帮助将不胜感激.

我有两个问题: 1)如何链接来自不同子目录的对象文件2)包括不同的搜索路径(在我的例子中有3个搜索路径).

在我的orinal设置中,makefile工作正常,我将测试代码tsnnls_test_DKU.c放在以下位置(在第三方库内):

Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls
Run Code Online (Sandbox Code Playgroud)

我链接到的所有目标文件都在

OBJDir = /home/dkumar/libtsnnls-2.3.3/tsnnls
Run Code Online (Sandbox Code Playgroud)

此外,包含在其中的一些包含文件tsnnls_test_DKU.c位于以下三个位置(三个搜索路径):

Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls  
Dir2 = /home/dkumar/libtsnnls-2.3.3
Dir3 = /home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic
Run Code Online (Sandbox Code Playgroud)

和我的makefile工作正常.

但是,我想将测试代码的位置更改为:

Dir4 = /home/dkumar/CPP_ExampleCodes_DKU/Using_tsnnls_DKU/
Run Code Online (Sandbox Code Playgroud)

这是我的makefile的样子(在其他用户输入后更新:

# A sample Makefile

VPATH = -L/home/dkumar/libtsnnls-2.3.3/tsnnls
INC_PATH  = -I/home/dkumar/libtsnnls-2.3.3/ -I/home/dkumar/libtsnnls-2.3.3/tsnnls/  -I/home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic/

# Here is a simple Make Macro.
LINK_TARGET     = tsnnls_test_DKU
OBJS_LOC    = tsnnls_test_DKU.o

# Here is a Make Macro that uses the backslash to extend to multiple lines.
OBJS =  libtsnnls_la-taucs_malloc.o libtsnnls_la-taucs_ccs_order.o \ …
Run Code Online (Sandbox Code Playgroud)

c c++ makefile search-path

6
推荐指数
1
解决办法
2万
查看次数

WSL2-$nvidia-smi 命令未运行

我在 WSL2 中安装了 Ubuntu 18.04LTS,并且能够使用 GPU。我可以从窗口运行终端运行 $nvidia-smi 。

但是,当我在 WSL2 上运行 $nvidia-smi 时找不到任何结果

gpu tensorflow windows-subsystem-for-linux

6
推荐指数
2
解决办法
2万
查看次数

Dependency Walker:打开文件时出错,系统找不到指定的文件

我试图找出我的C ++项目的依赖关系。我有该项目的.dll和.so文件。

我正在尝试使用依赖关系遍历来找出依赖关系。我认为我已经设置了正确的搜索路径。但是,它仍然会出现错误:

API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL: error opening file the system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)

以及其他文件的类似错误:

API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
GPSVC.DLL
IESHIMS.DLL
Run Code Online (Sandbox Code Playgroud)

我搜索了这些.dll文件,这些文件甚至不在我的计算机上。有人可以帮我吗?

有人可以建议替代依赖漫步者吗?

c++ dll dependency-walker

5
推荐指数
0
解决办法
2663
查看次数

C++链接错误与linux上的多个定义

我正在尝试编译代码,它正在获得多个定义的链接错误.不幸的是,我无法解决它,任何帮助将不胜感激.

我有以下文件:头文件:CEST.h; CEST_UI.h; GlobalVariable.h;
源文件:CEST.cpp; CEST_UI.cpp; GlobalVariable.cpp

声称具有多个定义的所有参数在"GlobalVariable.h"中定义,并在"GlobalVariable.cpp"中初始化.

我两次包括"GlobalVariable.h":一次在CEST.cpp中,第二次在CEST_UI.cpp中.

我在想"GlobalVariable.h"中的后续保护会保护我多重定义链接错误:

# ifndef GLOBALVARIABLE_H
#define GLOBALVARIABLE_H
………….
………….
#endif
Run Code Online (Sandbox Code Playgroud)

我还附加了"GlobalVariable.h"和"GlobalVariable.cpp",以便您可以查看.

在"GlobalVariable.h"中

# ifndef GLOBALVARIABLE_H
#define GLOBALVARIABLE_H

    #include <vector>
    ////////////////////////////////////////
    extern long lFA_MTPulse;
    extern long lNoOfMTPulses;
    extern long ltDK_MTPulse_Duration_us;
    //extern long ltDK_MTPulse_Delay_us;
    extern long ltDK_Wait_After_MT_us;
    extern long ltDK_Wait_After_MTSpoil_us;
    extern long lNoOfMTPulses_PerRTEB;
    extern long ltDK_PreAcqCESTPulseTime_ms;
    extern long ltDK_PreAcqCESTPulseTime_us;
    extern long lTest_XgradStrength;
    //double TR_MTPulse_Remain = 0.0;                                                                   // CEST This will be calculated later 
    long ltDK_TR_MTPulse_us;
    long ltDK_TimeNeeded_for_sMTCSpoilerOnly;
    long ltDK_MTBlockTime_DK;

    ////////////////////////////////////////
    extern double dBWTimeProd;
    extern …
Run Code Online (Sandbox Code Playgroud)

c++ linker multiple-definition-error

4
推荐指数
2
解决办法
1万
查看次数

Armadillo C++线性代数库:如何创建布尔值的向量

最近我开始使用Armadillo C++库.鉴于我的C++编码技巧不是很好,我发现这对线性代数非常友好.我也在使用它与我的matlab一起为许多重建算法加速.

我确实需要创建一个布尔值的向量,我宁愿使用这个库而不是.但是,我无法弄清楚如何去做.我尝试过使用uvec; 但是,文档似乎表明它不能与boolean一起使用.

任何帮助,将不胜感激.

此致,Dushyant

boolean vector armadillo

4
推荐指数
1
解决办法
2377
查看次数

C++:使用"()."和"()[]."

我正在尝试使用C++来理解西门子扫描仪的编程,并且鉴于我的C++技能有限,我在理解供应商提供的代码的许多部分时遇到了问题.

问题1

例如,代码使用引用(rMrProt)来对象MrProt和符号(例如使用().()[].)对我来说非常困惑.例如:

ImageSamples = rMrProt.kSpace().baseResolution()
ImageSize = rMrProt.sliceSeries()[0].readoutFOV()
Run Code Online (Sandbox Code Playgroud)

对这些陈述的一些解释将不胜感激.

有关对象MrProt的所有信息都在"MrProt.h","MrProt.dll","MrProt.lib"中.所有这些文件均已在以下网址分享:https: //docs.google.com/open?id = 0B0Ah9soYnrlIYWZkNDU2M2EtYTNmNC00YTc5LTllMzItYzIyMWU4M2ZhY2Fi

问题2

此外,我一直试图读取MrProt.dll和MrProt.lib没有任何成功.直到现在,我才知道了dumpbin.任何帮助,将不胜感激.

问题3

我所遇到的另一个困惑是与MrProt.h本身的某些部分有关.MrProt.h中有一条声明:

class __IMP_EXP MrProt: public MrProtocolData::MrProtDataDelegate
{
   typedef MrProtocolData::MrProtDataDelegate BasicImplementation;
   public:
   MrProt();
   MrProt(const MrProt& rSource);
   …
   ….
}
Run Code Online (Sandbox Code Playgroud)

在这里,__IMP_EXP我想这是一些编译器特定的东西..一些装饰等.但是,我仍然不知道该怎么做.

c++

2
推荐指数
1
解决办法
321
查看次数

涉及矢量的C++代码在visual studio上工作得很好,而不是在linux上工作

我正在为MRI扫描仪编码,基本要求是任何序列代码都应该在visual studio和linux上运行.

我有一部分代码可以在visual studio 2008上正常工作; 但是,在linux上给我错误.

有人可以告诉我,我做错了什么?

template<typename type1, typename type2, typename type3>
void PrintVector3(type1 VectorIn_1, type2 VectorIn_2, type3 VectorIn_3) {   

    type1::const_iterator  i1 = VectorIn_1.begin(); 
    type2::const_iterator  i2 = VectorIn_2.begin();  
    type3::const_iterator  i3 = VectorIn_3.begin(); 
    int lLenghtVec = VectorIn_1.n_elem();

    for(int i = 0; i != lLenghtVec; ++i){
        std::cout << std::setfill('0') << std::setw(3) << *i1 << "      " << *i2 << "      "  << *i3 <<std::endl;
        ++i3; ++i2; ++i1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

CESTiPAT/ReorderInfo_DK.h:185: error: expected ';' before 'i1'
CESTiPAT/ReorderInfo_DK.h:186: error: expected ';' before …
Run Code Online (Sandbox Code Playgroud)

c++ linux vector visual-studio-2008

1
推荐指数
1
解决办法
326
查看次数

使用mex将Matlab中的大矩阵传递给C:Matlab崩溃

我编写了一个mex代码,它从matlab代码向C代码发送标量和矩阵.它适用于较小的矩阵.但是,当我尝试传递大的稀疏矩阵(大小~8448 x 3264)时,matlab崩溃并出现以下错误:

我收到以下错误:Matlab遇到内部问题,需要关闭.

                  *Detailed error report*


------------------------------------------------------------------------
         Segmentation violation detected at Mon Feb  9 13:21:48 2015
  ------------------------------------------------------------------------

  Configuration:
    Crash Decoding     : Disabled
    Current Visual     : None
    Default Encoding   : UTF-8
    GNU C Library      : 2.19 stable
    MATLAB Architecture: glnxa64
    MATLAB Root        : /usr/local/MATLAB/R2014b
    MATLAB Version     : 8.4.0.150421 (R2014b)
    Operating System   : Linux 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64
    Processor ID       : x86 Family 6 Model 44 Stepping 2, GenuineIntel
    Software OpenGL    : 1
    Virtual …
Run Code Online (Sandbox Code Playgroud)

c c++ matlab matrix mex

0
推荐指数
1
解决办法
483
查看次数

什么是C指数对指针"*&"的引用

有人可以让我知道指针 "*&" 的C等价物吗?

换句话说,如果我的函数在C++中是这样的:

void func(int* p, int*& pr)
{
    p++;
    pr++;
}
Run Code Online (Sandbox Code Playgroud)

在C中转换它时,我如何更改第二个参数?

更新: @MikeDeSimone:如果我理解了翻译的代码,请告诉我?让我从初始化变量开始:

int i = 10;
int *p1 = &i;
int **pr= &p1;
Run Code Online (Sandbox Code Playgroud)

所以,当你执行(*pr)++时,这基本上相当于:

(p1)++
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解main()内部的外观如何?

问题2:如果我有这样的代码片段,我该怎么办?

void pass_by_reference(int*& p)
{
        //Allocate new memory in p: this change would reflect in main
    p = new int;
}
Run Code Online (Sandbox Code Playgroud)

c pointers reference

0
推荐指数
1
解决办法
2478
查看次数