符号函数

Numpy详解

吃可爱长大的小学妹 提交于 2020-03-02 03:48:59
NumPy 简介 Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但它不是真正的数组,而且在数据量比较大时,使用列表的速度会很慢。为此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。 NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。 例如,在3D空间一个点的坐标 [1, 2, 3] 是一个秩为1的数组,因为它只有一个轴。那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2,第二个维度长度为3. [[ 1., 0., 0.], [ 0., 1., 2.]] NumPy的数组类被称作 ndarray 。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。 数据类型 numpy的数据类型有下面的几个 数据类型 描述 bool_ 以字节存储的布尔值(True 或 False) int_ 默认的整数类型(和 C 的 long 一样,是 int64 或者 int32) intc 和 C 的 int 相同(一般为 int64 或 int32) intp 用于下标的整数(和 C 的

关于C++为什么模板类中的模板函数只能写在头文件

旧街凉风 提交于 2020-03-01 20:19:32
最近写模板类发现只能将模板函数的定义放在h文件里才能完成编译器链接。对于喜欢声明与定义分开的笔者来说这么写很不习惯。 那究竟是什么原因造成模板函数不能放在cpp文件里定义呢?本文就围绕着这个问题进行探究。 从编码到运行 首先笔者想要探讨一下一个C++项目是如何从文本文件生成可执行文件的。 预编译 预编译是将预编译宏命令进行处理,如 #include , #define , #ifdef , #pragma 等。 编译 编译是将文本中的源码转换成计算机能直接处理的汇编语言。这里要注意的是C++采用的是 分离式编译 (各个的h、cpp文件的编译独立)。 c++开发中广泛使用声明和实现分开的开发形式,其编译过程是分离式编译,就是说各个cpp文件完全分开编译,然后生成各自的obj目标文件,最后通过连接器link生成一个可执行的exe文件。引用自: https://blog.csdn.net/uestclr/article/details/51372780 链接 编译中提到了C++采用的是分离是编译,例如如下代码: Test.h void test(); Test.cpp #include "Test.h" void test() { //todo } main.cpp #include "test.h" int main() { test(); return 0; } 到此为止

LLDB调试器

佐手、 提交于 2020-02-27 12:34:42
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /* 先这么着 ... } 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。 LLDB LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。

Windbg实用手册

本秂侑毒 提交于 2020-02-24 08:58:01
Windbg工作中用的不多,所以命令老是记不住,每次使用都要重新查命令,挺烦。 趁这次培训的机会好好测试和总结了一下,下次再用就方便多了。 在这里一起共享一下,如果有错误,请指正。 基本知识和常用命令 (1) Windbg下载地址 http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 安装完后执行windbg –I将Windbg设置成默认调试器 (2) Windbg的命令分为标准命令,原命令和扩展命令,输入问号(?)可以显示所有的标准命令的帮助信息; 元命令以一个点(.)开始,输入.help可以显示所有的原命令的帮助信息;扩展命令以叹号(!)开始。 所有命令的具体用法可以通过F1查看Windbg的帮助文件。 (3) 通过设置符号文件路径,让Windbg自动从微软网站更新系统Dll的符号文件 SRV*d:\symbols* http://msdl.microsoft.com/download/symbols (4) 用分号(;)作为分隔符,可以在一行输入多条命令 (5) 按上下箭头可以浏览和选择以前输入过的命令 (6) Ctrl+Break终止一个很长时间没有完成的命令, Ctrl+Break也可以让正在运行的程序暂停 (7) Windbg默认的数值进制一般是16, 可以通过n命令查看和设置当前进制

深入程序编译链接和装载过程

僤鯓⒐⒋嵵緔 提交于 2020-02-20 02:29:27
文章目录 预编译 编译 汇编 链接 基础先知 指令和数据 分析二进制可重定位目标文件 main.o 的组成 强符号和弱符号 符号表 链接过程分析 运行 提问:一个源文件是如何变成可执行文件的? 在linux中,使用GCC来编译程序,我们逐步来分析: 预编译 gcc -E hello.c hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc hello.o -o hello 运行 ./hello 预编译 预编译阶段主要处理以"#"开头的预编译指令。 删除宏定义并作文本替换 递归展开头文件“#include” 处理#if、#ifdef、#elif、#else、#endif等 删除注释“//”和 “/* */” 添加行号和文件标识,以便编译器产生编译调试时的行号信息,以及产生错误或警号时能够显示行号 保留所有的#pragma指令 编译 词法分析 语法分析 语义分析 代码优化 生成汇编指令 汇编 将汇编指令转换成机器指令 链接 基础先知 指令和数据 局部变量属于指令,静态变量和全局变量属于数据。 int gdata1 = 10; //数据 int gdata2 = 0; //数据 强符号 int gdata3;//数据 static int gdata4 = 11; //数据 static int

简单理解符号执行技术

允我心安 提交于 2020-02-10 20:02:22
0X00 前言 因为最近看的很多静态检测的论文中涉及到了符号执行的概念,而在我第一次听到符号执行实际上是在我的一些搞二进制学长口中,自然认为是和 web 没啥关系,但是现在看来只是因为我我太菜了,很多知识在更高的层次看起来都是交融的,而不是我现在看到的全部都是互不相关的板块,或许这也就是为什么要读研吧, 不读研那就疯狂努力吧 。好了,废话不多讲了,由于我对符号执行的理解没有达到很高的层次,不能进行更详尽的总结分析 ,故我只能在网上找了一些我个人认为总结的比较好,并且通俗易懂的文章进行一些摘录, 在此之前先对这些优秀的作者表示感谢,文章之后我会附上我引用的文章或者论文的链接。 0X01 通俗地解释符号执行 Wiki中的定义是:在计算机科学中,符号执行技术指的是通过程序分析的方法,确定哪些输入向量会对应导致程序的执行结果为某个向量的方法(绕)。通俗的说, 如果把一个程序比作DOTA英雄,英雄的最终属性值为程序的输出(包括攻击力、防御力、血槽、蓝槽),英雄的武器出装为程序的输入(出A杖还是BKB)。那么符号执行技术的任务就是,给定了一个英雄的最终属性值,分析出该英雄可以通过哪些出装方式达到这种最终属性值效果。 可以发现, 符号执行技术是一种白盒的静态分析技术 。即,分析程序可能的输入需要能够获取到目标源代码的支持。 同时,它是静态的,因为并没有实际的执行程序本身,而是分析程序的执行路径

力扣 OJ 342. 4的幂

自古美人都是妖i 提交于 2020-02-09 09:17:57
题目: 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶: 你能不使用循环或者递归来完成本题吗? 代码: class Solution { public: bool isPowerOfFour(int n) { if (n <= 0)return false; while (n % 4 == 0)n /= 4; return n == 1; } }; 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/104221338

C++函数符号生成规则

血红的双手。 提交于 2020-02-06 06:06:35
在复习C++的基础知识点的时候,遇到了关于写出函数生成的函数符号问题,发现自己C++函数调用约定不清楚,所以打算总结一下,将C++函数的调用约定总结一下,加深一下记忆。 本文的主要内容是学习他人博客总结的结果。 符号生成规则 _cdecl调用约定: “?”+函数名+参数表的开始标识 “@@YA” + 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。 _stdcall调用约定: “?”+函数名+参数表的开始标识“@@YG”+函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。 _fastcal调用约定: “?”+函数名+参数表的开始标识 “@@YI”+ 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。 参数表拼写代号 X D E F H I J K M N _N U PA+ PB+ ... void char unsigned char short int unsigned int long unsigned long float double bool struct 指针+ 类型 const指针+类型 ... 举个例子: int func(int) // ?func@@YAHH@Z float func(float) // ?func@@YAMM@Z _thiscall调用约定(类成员方法的约定) :“?” +函数名+

人工智能、机器学习及深度学习的起源和发展

风格不统一 提交于 2020-01-29 00:02:45
人工智能、机器学习及深度学习的起源和发展 发展时间线 第一阶段:人工智能起步期 1956—1980s 1956达特茅斯会议标志AI诞生 1957神经网络Perceptron被罗森布拉特发明 1970受限于计算能力,进入第一个寒冬 第二阶段:专家系统推广 1980s—1990s 1980 XCON专家系统出现,每年节约4000万美元 1986 BP ,Geoffrey Hinton提出了前馈算法,一个通过对输入数据按照重要进行排序的精准神经网络。 1989 卷积,Yann LeCun写了另外一篇旷世之作,描述了卷积神经网络。这些发现突破了计算机难以解决的问题,譬如从一张照片中找到一只猫。 1990——1991 人工智能计算机DARPA没能实现,政府投入缩减,进入第二次低谷 1997 IBM的DeepBlue战胜国际象棋冠军 1997 Schmidhuber发明了长短期记忆网络(LSTM) 第三阶段:深度学习 2000s—至今 2006 Hinton提出“深度学习”的神经网络 2011 苹果的Siri问世,技术上不断创新 2012 Google无人驾驶汽车上路(2009年宣布) 2012年,计算机视觉界顶级比赛ILSVRC中,多伦多大学Hinton团队所提出的深度卷积神经网络结构AlexNet一鸣惊人,同时也拉开了深度卷积神经网络在计算机视觉领域广泛应用的序幕。成功原因 大量数据,

朝花夕拾之Matlab矩阵表示

我的未来我决定 提交于 2020-01-28 23:24:18
1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43;4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 1 2 3 4 5 >> Matrix_B = [1 2 3; >> 2 3 4;3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵 2.复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 例1-1 >> a=2.7;b=13/25; >> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C= 1.0000 5.4000 + 0.5200i 0.8544 0