arr

python-numpy模块(对矩阵的处理,ndarray对象)

早过忘川 提交于 2019-12-10 05:09:46
一.numpy模块 import numpy as np 约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 2.创建矩阵 1.np.array import numpy as np #创建一维的ndarray对象 arr = np.array([1, 2, 3]) print(arr) #[1 2 3] #创建二维的ndarray对象 arr = np.array([[1, 2, 3], [4,5,6]]) print(arr) ''' [[1 2 3] [4 5 6]] ''' #创建三维的ndarray对象 arr = np.array([[[1, 2, 3],[3,2,1]], [[4,5,6],[6,5,4]]]) print(arr) ''' [[[1 2 3] [3 2 1]] [[4 5 6] [6 5 4]]] ''' #我们可以这样理解.其实内这个可以相当于几何里面的,点,线,面,里面各个元素相当一个点,一个列表里面有几个元素相当于线也就是一维,然后列表里面套列表相当于线,以此类推 推荐Python大牛在线分享技术 扣qun:855408893 领域:web开发,爬虫,数据分析,数据挖掘,人工智能 3.对于矩阵的操作(ndarray对象的方法) 1

js实现浅拷贝和深拷贝

独自空忆成欢 提交于 2019-12-10 03:52:13
浅拷贝和深拷贝都只针对于像Object, Array这样的复杂对象, 区别:浅拷贝只复制对象的第一层属性、深拷贝可以对对象的属性进行递归复制 如果数组元素是基本类型,就会拷贝一份,互不影响,而如果是对象或者数组,就会只拷贝对象和数组的引用,这样我们无论在新旧数组进行了修改,两者都会发生变化,这种叫浅拷贝。 深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。 一、浅拷贝 1、数组的浅拷贝 (1)、可用concat、slice返回一个新数组的特性来实现拷贝 var arr = ['old', 1, true, null, undefined]; var new_arr = arr.concat(); // 或者var new_arr = arr.slice()也是一样的效果; new_arr[0] = 'new'; console.log(arr); // ["old", 1, true, null, undefined] console.log(new_arr); // ["new", 1, true, null, undefined]/2、 (2)、还有for循环也能实现数组的浅拷贝 var arr = [1,2,3,4,5] var arr2 = copyArr(arr) function copyArr(arr) { let

20191209-八大排序之堆排序

大兔子大兔子 提交于 2019-12-09 21:04:51
1. 堆排序 算法核心思想 堆排序利用堆的特点, 最大堆要求节点的元素都要不小于其孩子,最小堆要求节点元素都不大于其左右孩子,那么处于最大堆的根节点的元素一定是这个堆中的最大值,每次把堆顶元素放置在二叉树的尾部,然后重新建堆这样循环处理,最终就能完成排序。 核心算法逻辑如下: 建堆 把堆顶的元素和最后一个元素交换,这样,最大的元素就排到了最后面 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置 重复上面的1到3步,之后遍历完堆 在堆中,节点i的左子节点是2*i+1,右子节点是2*i+2,故最小值堆满足如下的特点: Node(i).value < Node(2*i+1).value Node(i).value < Node(2*i+2).value 代码实现 建堆,建堆的过程通过数组的给定数组的下标,建立以给定下标为根的堆,具体过程如下: def heapify(arr,root_index,arr_length): """给定数组,数组的下标,当前需要建堆的数组长度""" left_index = 2*root_index+1 right_index = 2*root_index+2 max_index = root_index #找到以arr[root_index]为根的堆的与左右子树3个节点中最大值的索引 if left_index

JS 基础学习

我的梦境 提交于 2019-12-09 12:40:51
1.开发工具选择 开发工具推荐 visual studio code,为了能够右键运行代码,需要安装插件 CodeRunner。 关于运行:必须先保存,在运行,如果不保存运行不会成功; 2.快速入门 2.1 数组 声明数组: var arr = [] 即可,声明一个非空数组 var arr = [1,2,"hello",null]; 数组中的内容可以是任意的数据类型; 获取数组中的值:arr[i],其中 i 为数组元素对应的索引值,从 0 开始; 获取数组长度:直接调用 length 方法。例如获取数组 arr 的长度,直接写 arr.length即可,注意没有 ();另:可以根据 length 任意修改数组长度,比如原数组为 var arr = [1,2,3] 此时数组长度为 3 ,如果想改变其长度为 10,直接调用 arr.length = 10 即可,此时数组 arr 的长度即为 10; js 中的数组即使越界,但是不会报错,只是值会为 undefined 数组中的其他方法 方法名 方法描述 indexOf() 获取数组指定元素的索引位置 slice(i) 数组截取,如果 i 为3,就截取索引从 3 到数组结束作为新数组 slice(startIndex,endIndex) 数组截取,从 startIndex 下标开始,到 endIndex 下标结束,包含

Java基础

允我心安 提交于 2019-12-09 11:52:38
整理自黑马day01-day05 1.字节 是我们常见的计算机中最小存储单元。计算机存储任何的数据,都是以字节的形式存储 8个bit ( 二进制位 ) 0000 - 0000表示为1个字节,写成1 byte或者1 B。 2.Windows常见命令: 3.JRE和JDK JRE ( Java Runtime Environment ) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。 JDK ( Java Development Kit ) :是Java程序开发工具包,包含 JRE 和开发人员使用的工具。 我们想要运行一个已有的Java程序,那么只需安装 JRE 即可。 我们想要开发一个全新的Java程序,那么必须安装 JDK 。 三者关系: JDK > JRE > JVM 4.命名规则: 硬性要求 标识符可以包含 英文字母26个 ( 区分大小写 ) 、 0 - 9数字 、 $ ( 美元符号 ) 和 _ ( 下划线 ) 。 标识符不能以数字开头。 标识符不能是关键字。 命名规范: 软性建议 类名规范:首字母大写,后面每个单词首字母大写 ( 大驼峰式 ) 。 方法名规范: 首字母小写,后面每个单词首字母大写 ( 小驼峰式 ) 。 变量名规范:全部小写。 5.Java的数据类型分为两大类: 基本数据类型: 整数、浮点数、字符、布尔。 引用数据类型: 类 、 数组

LeetCode 5 最长回文子串 Manacher线性算法

纵然是瞬间 提交于 2019-12-09 11:41:08
题目链接:https://oj.leetcode.com/problems/longest-palindromic-substring/ 回文串即正向反向序列都一样的连续序列 如abba,abcba... 为了统一回文串的偶数情况和奇数情况,可以向串中插入不相关的字符,例如abba->#a#b#b#a#, abcba->#a#b#c#b#a# 建立数组arr[]记录主串中以第i个字符为中心的回文串向右延伸的长度(即向右覆盖长度,不包括s[i]) 例如: 第一种情况: 设变量mx为当前向右最大覆盖位置下标,id为该回文串对称中心下标。在例子中,达到最右覆盖位置的为index=5,覆盖到5+arr[5]=8.所以,此时,mx=8,id=5 在计算arr[7]时(图中‘?’处i=7),可以利用arr[0~6]的值,发现7位于以id为对称中心的覆盖范围内(图中黄色部分)。并且,i=7的对称位置id*2-i=3的覆盖范围(蓝色部分)并未超出id的覆盖范围(黄色部分),所以,arr[7]可直接利用arr[3]的值,令arr[7]=arr[3]. 另外一种情况:i未超出黄色部分,但蓝色不服超出了黄色部分。如下图: 此时,arr[7]的值至少为其关于id=5的对称位置:arr[3].所以,先为arr[7]赋初值=arr[3].然后,再从(i+arr[i]+1),(i-arr[i]-1

js中的for循环 写法的效率对比

血红的双手。 提交于 2019-12-09 05:59:59
一共三种写法 如下: view sourceprint? for ( var i = 0; i < arr.length; i++) view sourceprint? for ( var i in arr) view sourceprint? for ( var i = 0, len = arr.length; i < len; i++) 先看下运行测试的界面: 再看下对应的三个结果,三种写法执行的效率是有很大不同的: 如此看来,执行效率最快的是第三种: view sourceprint? for ( var i = 0, len = arr.length; i < len; i++) 先声明变量,再进行循环判断,效率远比遍历数组高得多,也比循环取得数组长度的效率快得多! 下面是页面源代码: view sourceprint? <html> <body> <script type= "text/ 网页特效 " > function makeArr(num) { var arr = []; for ( var i = 0; i<num; i++){ arr.push( 'abc' ); } arr.join( '' ); return arr; } var num = 10000000; function function1() { var arr = makeArr(num);

$.each()和$().each(),以及 forEach ()的用法

柔情痞子 提交于 2019-12-09 05:04:50
1.forEach是js中遍历数组的方法,如下 var arr=[1,2,3,4]; arr.forEach(function(val,index,arr){// val为数组中当前的值,index为当前值的下表,arr为原数组 arr[index]=2*val; }); console.log(arr);// 结果是修改了原数组,为每个数乘以2 2.$.each()是jquery中遍历数组的方法,如下 var arr=[1,2,3,4]; $.each(arr,function(i,n){ alert("索引"+i+"对应的值"+n); }); 3.$().each()方法规定为每个匹配元素规定运行的函数,如下: <!DOCTYPE html> <html> <head> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("button").click(function(){ $("li").each(function(){ alert($(this).text()) }); }); }); </script> </head> <body> <button>输出每个列表项的值<

for循环效率对比

我是研究僧i 提交于 2019-12-09 04:54:16
三种for循环 1.【普通】for循环 for (var i = 0 ; i < arr. length ; i ++) { console.log(arr[i]); } 2.【加强版】for循环 for (var i = 0 ,len = arr. length ; i < len; i ++) { console.log(arr[i]); } 3.【for-in循环】 fir( var i in arr){ console .log(arr[i]); } 时间对比 通过以下代码来计算三个循环的运行时间 function test1 () { var arr = new Array ( 1000000 ); var date1 = new Date (); for ( var i = 0 ;i<arr.length;i++){ arr[i]= 0 ; } var date2 = new Date (); for ( var i = 0 ,j=arr.length;i<j;i++){ arr[i]= 1 ; } var date3 = new Date (); for ( var i in arr){ arr[i]= 2 ; } var date4 = new Date (); var for1_time = (date2 - date1); var for2_time =

海量数据topK算法

旧时模样 提交于 2019-12-08 18:35:42
背景: 由于内存限制,长度为一亿的某类型的数组无法全部放入内存进行排序,进而无法取出前 100 的元素 , 多见于搜索排名,更恶劣的情况是这一亿条数据还分布在多台机器上 原理与简化: 遍历长度为 N 的数组的前 K 个元素构建小顶堆,对于剩余的 N-K 的元素:小于其根节点的过滤掉,大于根节点则替换之并 heapify 该小顶堆,时间复杂度近似为 N*O(logK) ,因此只要实现一个定制版的 heapify 函数即可! 关键代码如下 : /* * @param arr 某数组,不考虑根节点,构成一小顶堆,length为K * @param startIndex 被替换后的根节点,应为0 */ public void heapify4topK(int[] arr,int startIndex){ int n=arr.length; int startValue=arr[startIndex];//要沉下去的数 int leftSon=2*startIndex+1; int minIndex=0; while (leftSon<n){ if (leftSon==n-1||arr[leftSon]<=arr[leftSon+1]){ minIndex=leftSon; }else if(arr[leftSon]>arr[leftSon+1]){ minIndex=leftSon+1;