值得收藏的27个机器学习的小抄
1.数组字面量
数组字面量提供了一种非常方便地创建新数组的表示法. 多个用逗号分隔的值的表达式. 数组字面量允许出现在任何表达式可以出现的地方. 数组的第一个值将获得属性名'0', 第二个值将获得属性名'1', 以此类推:
![](/assets/blank.gif)
1 var empty = [];2 var numbers = [3 'zero', 'one', 'two', 'three', 'four',4 'five', 'six', 'seven', 'eight', 'nine'5 ];6 7 console.log(empty[1]); // undefined8 console.log(numbers[1]);// 'one'9 10 console.log(empty.length);// 0 11 console.log(numbers.length);// 10
![](/assets/blank.gif)
对象字面量:
![](/assets/blank.gif)
1 var numbers_object = {2 '0': 'zero',3 '1': 'one',4 '2': 'two',5 '3': 'three',6 '4': 'four', 7 '5': 'five', 8 '6': 'six', 9 '7': 'serven', 10 '8': 'eight', 11 '9': 'nine' 12 };
![](/assets/blank.gif)
两者产生的结果相似, numbers和numbers_object都是包含10个属性的对象, 并且那些属性刚好有相同的名字和值. 但是他们也有一些显著的不同, numbers继承自Array.prototype, 而numbers_object继承自Object.prototype, 所以numbers继承了大量有用的方法. 同时, numbers也有一个诡异的length属性, 而numbers_object则没有.
在大多数语言中, 一个数组所有元素都要求是相同的类型. JavaScript允许数组里包含任意混合类型的值:
![](/assets/blank.gif)
1 var misc = [ 2 'string', 98.6, true, false, null, undefined, 3 ['nested', 'array'], {object: true}, NaN, 4 Infinity 5 ]; 6 7 console.log(misc.length);// 10
![](/assets/blank.gif)
在JavaScript中, 中括号[]表示一个数组, 也可以理解为数组对象; 花括号{}表示一个对象, []和{}一起使用, 可以形成一个对象数组, 如以上示例所示.
2.长度
每个数字都有一个length属性, 和大多数其他语言不同, JavaScript数组的length是没有上界的. 如果你用大于或等于当前length的数字作为下标来存储一个元素, 那么length值会被增大以容纳新元素, 不会发生数组越界错误.
length属性的值是这个数组的最大整数属性名加上1, 它不一定等于数组里的属性的个数:
1 var myArray = []; 2 console.log(myArray.length);/www.thd178.com// 0 3 4 myArray[1000000] www.taohuayuan178.com = true; 5 console.log(myArray.length);//www.120xh.cn 10000001 6 // myArray只包含一个属性
[]后置下标运算符把它所含的表达式转换成一个字符串, 如果该表达式有toString方法, 就使用该方法的值. 这个字符串被将用作属性名. 如果这个字符串看起来像一个大于等于这个这个数组当前的length且小于4294967295的正整数, 那么这个数组的length会被重新设置为新的下标加1, 否则length值为这个数组的长度.
3.删除
由于JavaScript的数组其实就是对象, 所以delete运算符可以用来从数组中移除元素:
1 var numbers = ['zero', www.baohuayule.net 'noe', undefined, 'shi', 'go']; 2 delete numbers[www.vboyule.cn 2]; 3 console.log(numbers.length);www.yisengyuLe.com // 5
不幸的是, 那样会在数组中留下一个空间. 这是因为排在被删除元素之后的元素保留着它们最初的属性. 而你通常想要的是递减后面每个元素的属性.
幸运的是, JavaScript数组有一个splice方法. 它可以对数组做个手术, 删除一些元素并将它们替换为其他的元素. 第1个参数是数组中的一个序号, 第2个参数是要删除的元素个数. 任何额外的参数会在序号那个点的位置被插入到数组中:
1 var numbers = ['zero', 'noe', undefined, 'shi', 'go']; 2 numbers.splice(2, 1); 3 console.log(numbers.length);// 4
值为'shi'的属性的键值从'3'变到'2'. 因为被删除属性后面的每个属性必须被移除, 并且以一个新的键值重新插入, 这对于大型数组来说可能会效率不高.
4.容易混淆的地方
在JavaScript编程中, 一个常见的错误是在必须使用数组时使用了对象, 或者在必须使用对象时使用了数组. 其实规则很简单: 当属性名是小而连续的整数时, 你应该使用数组. 否则, 使用对象.
JavaScript本身对于数组和对象的区别是混乱的. typeof运算符报告数组的类型是'object', 这没有任何意义, JavaScript没有一个好的机制来区别数组和对象, 我们可以通过定义自己的is_array函数来弥补这个缺陷:
![](/assets/blank.gif)
1 var array = [2 'zero', 'one'3 ];4 5 var obj = {6 '0': 'zero',7 '1': 'one'8 };9 10 var is_array = function (value) { 11 return Object.prototype.toString.apply(value) === '[object Array]'; 12 }; 13 14 console.log(is_array(array));www.tkcyl1.com/ // true 15 console.log(is_array(obj));// false
![](/assets/blank.gif)
5.方法
JavaScript提供了一套数组可用的方法. 这些方法是被储存在Array.prototype中的函数, Object.prototype和Array.prototype是可以被扩充的, 举例来说, 假设我们想要给array增加一个方法, 它允许我们队数组进行计算:
![](/assets/blank.gif)
1 //通过给Function.prototype增加方法来使得该方法对所有函数可用2 Function.prototype.method = www.boshenyl.cn function (name, func) {3 this.prototype[name] = func;4 return this;5 };6 7 Array.method('reduce', function (f, value) {8 var i; 9 for (i = 0; i <www.leyouzaixan.cn this.length; i++) { 10 value = f(this[i], value); 11 } 12 return value; 13 });
![](/assets/blank.gif)
通过给Array.prototype扩充了一个函数, 每个数组都继承了这个方法. 在这个例子里, 我们定义了一个reduce方法, 它接受一个函数和一个初始值作为参数,. 它便利这个数组, 以当前元素和该初始值为参数调用这个函数, 并且计算出一个新值. 当完成时, 它返回这个新值.
如果我们传入一个把两个数字相加的函数, 它会计算出相加的和. 如果我们传入把两个数组相乘的函数, 它会计算两者的乘积:
![](/assets/blank.gif)
1 // 创建一个数组数组2 var data = [4, 8, 15, 16, 23, 42];3 4 // 定义两个简单的函数, 一个是把两个数字相加, 另一个是把两个数字相乘.5 var add = function (a, b) {6 return a + b;7 };8 9 var mult = function (a, b) { 10 return a * b; 11 }; 12 13 // 调用data的reduce方法, 传入add函数. 14 var sum = data.reduce(add, 0); 15 console.log(sum);// 108 16 17 // 再次调用reduce方法, 这次传入mult函数 18 var product = data.reduce(mult, 1); 19 console.log(product);// 7418880 20 21 // 因为数组其实就是对象, 所以我们可以直接给一个单独的数组添加方法: 22 data.total = function () { 23 return this.reduce(add, 0); 24 }; 25 26 console.log(data.total());// 108
![](/assets/blank.gif)
6.指定初始值
JavaScript的数组通常不会预置值. 如果你用[]得到一个新数组, 它将是空的. 如果你访问一个不存在的元素, 得到的值则是undefined. 如果你知道这个问题, 或者你在尝试获取每个元素之前都很有预见性地设置他的值, 那就万事大吉了. 但是, 如果你实现的算法是假设每个元素都从一个已知的值开始(例如0), 那么你必须自己准备好这个数组. JavaScript应该提供一些类似Array.dim这样的方法来做这件事情, 但我们可以很容易纠正这个疏忽:
![](/assets/blank.gif)
1 Array.dim = function (dimension, initial) {2 var a = [], i;3 for (i = 0; i < dimension; i++) {4 a[i] = initial;5 }6 return a; 7 }; 8 9 // 创建一个包含10个0的数组 10 var myArray = Array.dim(10, 0);
![](/assets/blank.gif)
JavaScript没有多维数组, 但就像大多数类C语言一样, 它支持元素为数组的数组:
![](/assets/blank.gif)
1 var matrix = [ 2 [0, 1, 2], 3 [3, 4, 5], 4 [6, 7, 8] 5 ]; 6 7 console.log(matrix[2] [1]);// 7
![](/assets/blank.gif)
JavaScript对矩阵也提供了更好的支持:
![](/assets/blank.gif)
1 Array.matrix = function (m, n, initial) {2 var a, i, j, mat = [];3 for (i = 0; i < m; i++) {4 a = [];5 for (j = 0; j < n; j++) {6 a[j] = initial; 7 } 8 mat[i] = a; 9 } 10 return mat; 11 }; 12 13 // 构造一个用0填充的4 * 4矩阵 14 var myMatrix = Array.matrix(4, 4, 0); 15 console.log(myMatrix); 16 console.log(myMatrix[3] [3]);// 0
![](/assets/blank.gif)
用0填充的4 * 4矩阵:
![](/assets/blank.gif)
1 // 用来构造一个单位矩阵的方法2 Array.identity = function (n) {3 var i, mat = Array.matrix(n, n, 0);4 for (i = 0; i < n; i++) {5 mat[i] [i] = 1;6 }7 return mat; 8 }; 9 10 myMatrix = Array.identity(4); 11 console.log(myMatrix); 12 13 console.log(myMatrix[3] [3]);// 1
值得收藏的27个机器学习的小抄相关推荐
- 27个机器学习图表,帮你作弊一般飞速成长!
今天分享一篇机器学习的文章.翻了一半,发现Linux中国已经翻译过了...干脆搬过来,还有一个姊妹篇<My Curated List of AI and Machine Learning Res ...
- python怎么做彩票概率_小白学数据小抄放送 Python,R,大数据,机器学习
原标题:小白学数据小抄放送 Python,R,大数据,机器学习 大数据文摘作品,转载要求见文末 作者 | Elaine,田桂英,Aileen 导读:前段时间小白学数据专栏出了一期Python小抄表,后 ...
- 小白学数据 | 28张小抄表大放送:Python,R,大数据,机器学习
1. Python的数据科学快速入门指南 如果你刚入门Python,那么这张小抄表非常适合你.查看这份小抄表,你将获得循序渐进学习Python的指导.它提供了Python学习的必备包和一些有用的学习技 ...
- 小白学数据_|_28张小抄表大放送:Python,R,大数据,机器学习
1. Python的数据科学快速入门指南 如果你刚入门Python,那么这张小抄表非常适合你.查看这份小抄表,你将获得循序渐进学习Python的指导.它提供了Python学习的必备包和一些有用的学习技 ...
- 职场办公人员必备的10款好用软件,值得收藏!
我们日常使用电脑的时候,都会使用到各种功能的软件,那么有哪些比较好用的软件呢?小编和大家分享10款值得推荐的好用软件,职场办公人员必备. 1.电脑自动定时关机软件-Wise Auto Shutdown ...
- 三年级优秀书籍推荐_小学1-3年级课外阅读书单推荐,值得收藏!
原标题:小学1-3年级课外阅读书单推荐,值得收藏! 一年级上册 1.<小巴掌童话> 张秋生著 2.<365夜故事> 鲁 兵主编 3.<小猪唏哩呼噜>(小布头丛书) ...
- 机器学习入门必备的13张“小抄”(附下载)
目录 1)TensorFlow 2)Keras 3)Neural Networks 4)Numpy 5)Scipy 6)Pandas 7)Scikit-learn 8)Matplotlib 9)Pyt ...
- 收藏 | 27个机器学习小抄(附学习资源)
来源:机器学习算法与自然语言处理 本文多资源,建议收藏. 本文针对机器学习基本概念及编程和数学基础,为你列出相应的学习资源. 机器学习(Machine Learning)有很多方面,当我开始研究学习它 ...
- 总结了 200 道 BAT 机器学习面试题,值得收藏 (附参考答案)
刷题,是面试前的必备环节.本文作者总结了往年BAT机器学习面试题,干货满满,值得收藏. 想要入职大厂可谓是千军万马过独木桥.为了通过层层考验,刷题肯定是必不可少的.本文作者根据网络在线发布的BAT机器 ...
最新文章
- 重磅:辽宁副省长获中国版诺贝尔奖 !2020未来科学大奖揭晓
- 使用virtualbox nat方式中的端口映射使用ssh服务
- 计算机习题2,计算机应用习题2
- vue双击事件_我总结了12个Vue.js开发技巧和窍门
- Unity 协程原理探究与实现
- ctrl c 失效了_[安卓+PC双端]超C女仆无馬中字
- 经典面试题(38):以下代码将输出的结果是什么?
- java 8 foreach获取索引
- 解决formview遍历控件的问题
- Axure RP 9 下载安装
- HBuilderX开发的uniapp项目运行到微信小程序开发者工具上的方法
- 小程序中自定义组件、父子传值的具体步骤(秒懂)
- HDU1241 Oil Deposits(BFS/DFS)
- 华三交换机snmp配置
- 测试大佬带你揭秘功能测试的内幕
- PHP 文本式留言板源码
- 路径中 / ./ ../ ../../ ../../../ 的含义
- 网络流 之 一般增广路算法 标号法实现
- 卷积神经网络实现图像分类
- C# 10分钟入门基于WebOffice实现在线编辑文档,实时保存到服务器(所有office,兼容WPS)
热门文章
- .nii.gz 图片文件的读取
- 安卓手机云便签图片录音及附件文件的存储位置在哪里?
- 解析IIS安装的FTP服务器的日志
- 微信是怎样一步步控制你手机
- JQuery EasyUI(47)
- 豪华摆脱游戏中大奖_中大奖! 如何找到赚钱的领域
- python播放视频代码_python脚本抓取优酷在线视频地址代码
- Python计算机二级编程题真题及考点总结【纯干货】(下篇)
- 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)...
- java将英文句子分解为单词,Java如何将文本或句子分解为单词?