C++标准ISO-IEC-14882-2003:第14章:模板-第3节:模板实参

C语言实现实数和复数矩阵及其各种运算(一) 一、前言 最近在企业实习,花了三个星期的时间肝了一个室内定位算法(雏形,还未优化),实现matlab和C的联写、联调,其难点我认为在于矩阵的各种运算,C++中有Eigen库可用,以前在学slam和做课题时候在Ubuntu下用过一段时间的Eigen,功能强大,提供了各种典型的matrix计算接口,但是在C中,需要我们自己编写每个功能模块。算法核心代码matlab只有大概100行,但是C我写了大概有1500多行。谨以此连载文档记录一下算法开发的关键--复数矩阵运算。 网上关于C语言实现矩阵运算的de 阅读详情

 

14.3 模板实参

1.        对应模板形参的三种形式,模板实参也有三种形式:类型、非类型和模板。模板 id 中指定的每个模板实参的类型和形式应该与其声明时模板形参列表中相应的形参的类型和形式相匹配。【例:

template<class T> class Array {

T* v;

int sz;

public:

explicit Array(int);

T& operator[](int);

T& elem(int i) { return v[i]; }

// ...

};

Array<int> v1(20);

typedef complex<double> dcomplex; // complex 是标准模板库

Array<dcomplex> v2(30);

Array<dcomplex> v3(40);

void bar() {

v1[3] = 7;

v2[3] = v3.elem(4) = dcomplex(7,8);

}

2.        在模板实参中,不论对应的形参是什么形式,类型 id 与表达式之间的歧义都会被解析为类型 id 。【例:

template<class T> void f();

template<int I> void f();

void g()

{

f<int()>(); // int() is a type-id: call the first f()

}

】

3.        模板实参的名字在用作实参的时候必须是可访问的。【注:如果模板实参的名字在用作实参的时候是可访问的,当模板实参名字被使用的时候会产生实例化,这时就没有更进一步的访问限制了。】【例:

template<class T> class X {

static T t;

};

class Y {

private:

struct S { /* ... */ };

X<S> x; // OK: S 可访问

// X<Y::S> 有一个类型为 Y::S 的静态成员

// OK: 尽管 Y::S 是私有的

};

X<Y::S> y; // 错误 : S 不可访问

】模板实参的类型如果为类,模板定义对于无法访问的模板实参类型的成员没有特殊的访问权限。

4.        当使用默认模板实参的时候,模板实参列表可以为空。在这种情况下,空的 <> 尖括号仍然应当以模板实参列表的形式出现。【例:

template<class T = char> class String;

String<>* p; // OK: String<char>

String* q; // 语法错误

】

5.        类模板特化类型的对象的显式析构函数调用可以显式指定模板实参。【例:

template<class T> struct A {

˜A();

};

void f(A<int>* p, A<int>* q) {

p->A<int>::˜A(); // OK: 调用析构函数

q->A<int>::˜A<int>(); // OK: 调用析构函数

}

6.        如果模板实参的使用导致了模板特化的实例化过程非法,那么程序就是非法的。

7.        模板 id 中的模板是个重载函数模板时,重载集合中的非模板函数、模板形实参数不匹配的函数模板都会被排除掉。如果函数模板中没有匹配的模板形参,程序就是非法的。

14.3.1 模板的类型实参

1.          模板参数的实参如果为类型参数,那么它必须是个类型 id

2.          局部类型、没有连接性的类型、无名类型,和由这些类型构成的类型,都不能用作模板参数的实参。【例:

template <class T> class X { /* ... */ };

void f()

{

struct S { /* ... */ };

X<S> x3; // 错误 : 局部类型用作模板实参

X<S*> x4; // 错误 : 局部类型的指针用作模板实参

}

】【注:模板实参可以是不完整类型。】

3.          如果一个声明根据模板形参的类型获得了一个函数类型,而导致某个没有使用函数声明符语法的声明却成为了函数类型,该程序就是非法的。【例:

template<class T> struct A {

static T t;

};

typedef int function();

A<function> a; // 非法 : 这样会导致 A<function>::t 成为一个静态函数(但它声明时却不是函数语法)

】

14.3.1 模板的非类型实参

1.          非类型、非模板的模板实参应该有如下形式之一:

a)          整形常量表达式或枚举类型

b)         非类型模板形参的名字

c)          有外部连接性的对象或函数的地址,包括函数模板和模板 id ,但是不包括非静态成员。该地址用 & 后跟 id 表达式的形式表示;如果名字是个函数、数组,或对应的模板形参是引用,则 & 可以省略

d)         5.3.1 节中描述的成员指针。

2.          【注:字符串字面量不满足上述任何一条的需求,所以不能用作模板实参。【例:

template<class T, char* p> class X {

// ...

X();

X(const char* q) { /* ... */ }

};

X<int,"Studebaker"> x1; // 错误 : 字符串字面量用作模板实参了

char p[] = "Vivisectionist";

X<int,p> x2; // OK

】】

3.          【注:数组元素的地址,非静态成员的名字或地址,都不能用作模板实参。【例:

template<int* p> class X { };

int a[10];

struct S { int m; static int s; } s;

X<&a[2]> x3; // 错误 : 数组元素的地址

X<&s.m> x4; // 错误 : 非静态成员的地址

X<&s.s> x5; // 错误 : 应该使用 &S::s 的形式

X<&S::s> x6; // OK: 静态成员的地址

】】

4.          【注:当对应的模板形参是引用类型时,临时对象、无名字的左值、有名字但是没有外部链接的左值都不能用作模板实参。【例:

template<const int& CRI> struct B { /* ... */ };

B<1> b2; // 错误 : 模板实参会创建一个临时对象

int c = 1;

B<c> b1; // OK

】】

5.          下列的类型转换会应用于每个用作非类型模板实参的表达式上。如果非类型模板实参不能被转换为相应模板形参所要求的类型,程序就是非法的。

a)          对于整形、枚举型的非类型实参,使用整型提升和整型转换

b)         对于对象指针的非类型实参,使用修饰转换、数组 - 指针转换。【注:特别之处,空指针转换、派生类到基类的转换不会被使用。尽管 0 作为整型的非模板参数是个有效的实参,但它能用作指针类型的非模板实参。】

c)          对于对象引用的非类型模板形参,不会使用类型转换。引用所指向的类型,可以比模板实参的 cv 修饰程度更深、或相同。模板形参直接绑定于模板实参上,模板实参必须是个左值。

d)         对于函数指针的非类型形参,只使用数组 - 指针类型转换。如果模板实参代表一个重载函数集合(或其指针),合适的函数会从该集合中选取。

e)          对于函数引用的非类型形参,不会使用类型转换。如果模板实参代表一个重载函数集合,合适的函数会从该集合中选取。

f)          对于成员函数指针的非类型形参,不会使用类型转换。如果模板实参代表一个重载函数集合,合适的函数会从该集合中选取。

g)          对于数据成员指针的非类型形参,使用修饰转换。【例:

template<const int* pci> struct X { /* ... */ };

int ai[10];

X<ai> xi; // 数组到指针的转换,修饰转换

struct Y { /* ... */ };

template<const Y& b> struct Z { /* ... */ };

Y y;

Z<y> z; // 没有转换 , 但是注意额外的 cv 修饰

template<int (&pa)[5]> struct W { /* ... */ };

int b[5];

W<b> w; // 没有转换

void f(char);

void f(int);

template<void (*pf)(int)> struct A { /* ... */ };

A<&f> a; // 选择 f(int)

】

 

 

14.3.1 模板的模板实参

1.          类型为模板的模板形参对应的模板实参必须是类模板的名字,使用 id 表达式的形式表示。在匹配模板的模板实参时,只有对应模板形参的原始类模板被考虑候选;该类模板的偏特化不在考虑之列,即使其参数列表能够匹配外围模板的模板形参。

2.          当基于模板的模板形参的特化进行实例化的时候,关联于原始类模板的偏特化才被考虑候选。如果实例化的时候,该特化不可见,并且它被当做已经可见了一样选用,那么该程序就是非法的;不需要给出诊断信息。【例:

template<class T> class A { // 原始模板

int x;

};

template<class T> class A<T*> { // 偏特化

long x;

};

template<template<class U> class V> class C { // 类模板 C 的模板参数为类模板 V

V<int> y;

V<int*> z;

};

C<A> c; // C<A> 内部的 V<int> 使用原始模板,所以 c.y.x 的类型为 int

// C<A> 内部的 V<int*> 使用特化,所以 c.z.x 的类型为 long

】

 

 

 

 

 

ISO/IEC 14882:2003 C++03 C++标准 英文版 PDF 非扫描版 ISO/IEC 14882:2003 C++03 C++标准 英文版 PDF 非扫描版 INTERNATIONAL ISO/IEC STANDARD 14882 Second edition 2003-04-01 立即下载

相关推荐

ISO IEC 14882 2003 (C++03)

ISO IEC 14882 2003 (C++03)

OpenCV中基本数据结构(8)_Complex

Complex为OpenCV中的复数表示类,与STL 中的complex类似但是不一样,两者可以互换,与STL的complex最大的不同是,STL中获取到实部和虚部的值 分别使用real()和image(),而OpenCV是直接使用类中的成员变量re和im获取,相比STL 使用更加高效方便。 下面来自以《learning Opencv3》一段说明,(书中重要的原句,给没时间阅读原著的开发者,直接...

weixin_42730667的博客 992

【气动弹性实战】基于Nastran与Patran的机翼颤振仿真:从模态分析到临界速度预测

本文详细介绍了基于Nastran与Patran的机翼颤振仿真全流程,从气动弹性问题解析、机翼建模技巧到模态分析与临界速度预测。通过实战案例展示如何利用SOL 145求解器进行颤振分析,并分享网格划分、材料属性设置等工程经验,帮助工程师有效解决飞行器设计中的气动弹性耦合问题。

weixin_33725722的博客 594

数据结构 1-实现复数抽象数据类型Complex(C++)

采用C/C++如何实现复数抽象数据类型Complex?提交源代码和报告,报告内描述算法流程(可以用伪代码、流程图或者自然语言描述)。使Z的实部e1为v1,虚部为v2。将两个复数实部相加,虚部相加。得到另一个复数的实部、虚部。将Z的实部赋值给real。将Z的虚部赋值给Imag。成员包含一个实部和虚部。

ebatudou的博客 1329

手把手教你用Apple Developer App完成苹果开发者账号注册(含证件验证失败解决方案)

本文详细指导如何通过Apple Developer App完成苹果开发者账号注册,特别针对证件验证失败问题提供解决方案。从准备工作到注册流程,再到验证失败的处理方法,帮助开发者顺利完成注册,避免常见错误。

moss5的博客 1157

C#实战:如何用winmm.dll打造毫秒级高精度定时器(附完整代码)

本文详细介绍了在C#中利用winmm.dll实现毫秒级高精度定时器的完整方案。针对.NET内置定时器精度不足的问题,通过调用timeSetEvent等原生API,提供了超越系统时钟中断周期的精准定时能力。文章包含核心原理剖析、完整的封装类代码以及音视频处理、游戏开发等场景下的实战应用与性能调优指南。

ujm5678901的博客 690

C 学习笔记 —— typedef & 二进制输出

如果声明总位数超过unsigned int类型大小,就会用到下一个unsigned int类型的存储位置。C语言以 unsigned int作为位字段的基本布局单元,即使一个结构中只有一个成员1位字段,该结构也是unsigned int类型的大小。结构体变量prnt被存储在int大小的内存单元中,他只占其中的4位。位字段是一个signed int或者unsigned int类型变量中一组相邻的位。所以我们想直观看到二进制数我们可以将整数转换成对应进制的字符串。输出十六进制:%x;

Charles Ren's Tech Blog 764

原形网络(Prototypical Networks)基于PyTorch的实现

我在Jay2coomzz的基础上修改了数据处理方式和evaluation_model()方法,作为初学者若有不当之处恳请大家批评指正,原文链接如下: https://blog.youkuaiyun.com/weixin_38471579/article/details/102631018 数据集和源码链接将放到评论区 文章目录1 数据集一个简单的数据集介绍数据集处理2 搭建网络CNNProtonets 1 数据集 一个简单的数据集介绍 Omniglot数据集一共包含1623 类手写体,每一类中包含20 个样本。其中.

weixin_43872532的博客 6636

非类型形参的模板实参

模板形参不必都是类型。

delphiwcdj的专栏 2425

【项目实战】小智AI MCP协议在IoT设备控制中的深度应用解析

本文深度解析小智AI MCP协议在IoT设备控制中的应用实践。通过MCP协议作为AI与物联网设备的翻译桥梁,实现大语言模型与ESP32等硬件的无缝通信。文章详细介绍了环境搭建、工具注册、消息路由机制,并以语音控制RGB灯光系统为例展示完整开发流程,为AIoT开发者提供实用指南。

oauth7security的博客 824

Innovus每日精要 | 用setScanReorderMode优化扫描链,效率翻倍!

在数字后端物理设计的世界里,扫描链优化就像修路一样,既要保证数据流的顺畅,又要尽量减少绕路和资源浪费。它的主要任务是优化扫描链的连接方式,确保数据能快速、安全地流动。无论是多电压域设计、分区设计,还是复杂的逻辑门,它都能帮你搞定。后,你会发现它不仅能帮你节省时间,还能让你的设计更优雅、更高效。下次遇到扫描链问题时,不妨试试这些技巧,说不定你的设计效率会翻倍!,它能帮你搞定扫描链优化的那些事儿,让你的设计更高效、更优雅。接下来,我们看看这个命令的几个关键选项,以及它们的实际用途。扫描链优化看似枯燥,但掌握。

weixin_50820814的博客 1442

C++标准ISO-IEC-14882-2003:第14章:模板-第1节:模板的参数

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object class

declspec的专栏 952

关于IBV_WR_RDMA_WRITE_WITH_IMM的理解

对于IBV_WC_RECV_RDMA_WITH_IMM的描述是这样的,也就是说并不需要sge,所以下发的sge,可以是NULL,个数可以是0。(1)需要下发post_recv,但是下发是post_recv当中的sge的地址可以是空,sge个数可以是0。伪代码,实际的rkey和addr已经通过socket交换。并且poll_cq时,有返回,在这篇文章当中对于poll_cq时,主要区别点有两个,这个是对于接收端而言。(2)可以带即时数据,

qq_38158479的博客 2419

C++标准ISO-IEC-14882-2003:第14章:模板

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object class

declspec的专栏 1292

电气设备Simlink仿真(Matlab)

目录 1、电气设备的分类及原理 2、直流输电控制与保护的仿真 (1)本次实验直流输电控制与保护的主电路: (2)直流输电的控制 2、资源下载(百度网盘) 1、电气设备的分类及原理 电气设备大体上可以分为一次设备、二次设备,本次仿真实验主要讲解的是高压直流输电的控制与保护仿真。高压直流输电的原理是整流和有源逆变的应用。下图是一个简单的单极直流输电系统,属于晶闸管的整流电路,交流通过晶闸管的整流变成直流,变成直流后通过长距离输电送往远端,送到远端的直流经过晶闸管的有源逆变变成交流,...

weixin_46039719的博客 1418

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++标准ISO-IEC-14882-2003:第14章:模板-第4节:类型等价

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty

declspec的专栏 985

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++标准ISO-IEC-14882-2003:第14章:模板-第2节:模板特化的名字

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty

declspec的专栏 631

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C,C++ 的发展和标准化进程

C语言 https://baike.baidu.com/item/c语言 1.K&R C 起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被

icycolawater的专栏 1037

CUDA学习(六十八)

C / C ++语言支持:如使用NVCC编译中所述,使用nvcc编译的CUDA源文件可以包含主机代码和设备代码的混合。 CUDA前端编译器旨在模拟主机编译器相对于C ++输入代码的行为。 输入源代码根据C ++ ISO / IEC 14882:2003,C ++ ISO / IEC 14882:2011或C ++ ISO / IEC 14882:2014...

weixin_33878457的博客 292

[c/c++]complex类的标准库实现

简介: 复数运算在数学领域非常重要,而且C++标准库也完备的实现了关于复数的几乎所有运算。要使用compelx类需要包含文件,并在std命名空间内引用。complex类包含了四则运算(+、-、*、/)、符号运算(+、-)、逻辑运算(==、!=)、三角运算(sin、cos、tan)、双曲运算(sinh、cosh、tanh)、指数运算(exp、pow)、幂运算(log、log10)等。通过对这些

liuzhongsky的专栏 1万+

在高性能计算中慎用C++ std::complex

 Copyright (c) prototype, all rights reserved。 在不对原文内容(包括作者信息)做任何改动的前提下,欢迎自由转载。 两年多前写的内部资料。现在自己把它翻成中文,贴到我的blog上来。 近来闲暇时,我用C++和表达式模板(expression template)技术实现了一个复数类(注意:是类,而不是类模板)— Complex。

prototype的专栏 1万+

C++ 运算符重载

以复数来说明重载的例子,包括+,-,*,/四种运算。 不用class,不用重载,用double数组,分别表示实部、虚部,结构体写类型为引用后者指针的函数,用class中的函数都可以做到,但是用 重载运算符的方法是最最便捷的. 下面的示例代码分别使用1、数组,2、函数,3、重载。 //pointer,reference,struct also OK #include <iost...

weixin_34228617的博客 130

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 245

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 392

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 341
上一篇: C++标准ISO-IEC-14882-2003:第14章:模板-第2节:模板特化的名字
下一篇: C++标准ISO-IEC-14882-2003:第14章:模板-第4节:类型等价
declspec
博客等级 码龄21年 3粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值