arr

高阶函数 -------JavaScript

你离开我真会死。 提交于 2020-02-08 21:28:04
高阶函数 本文摘要: http://www.liaoxuefeng.com/ JavaScript的 函数其实都指向某个变量 。既然变量可以指向函数,函数的参数能接收变量,那么 一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 。 一个最简单的高阶函数: function add(x, y, f) { return f(x) + f(y); } 当我们调用 add(-5, 6, Math.abs) 时,参数 x , y 和 f 分别接收 -5 , 6 和函数 Math.abs ,根据函数定义,我们可以推导计算过程为: x = -5; y = 6; f = Math.abs; f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11; return 11; 用代码验证一下: add(-5, 6, Math.abs); // 11 编写高阶函数,就是让函数的参数能够接收别的函数。 map 里面的函数可以根据具体要求进行改写 把集合的每个元素做了逻辑处理,返回新的集合 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组 [1, 2, 3, 4, 5, 6, 7, 8, 9] 上,就可以用 map 实现如下: 由于 map() 方法定义在JavaScript的 Array 中,我们调用 Array 的 map()

JavaScript学习-高阶函数

廉价感情. 提交于 2020-02-08 21:27:49
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 一个例子 function add(x, y, f) { return f(x) + f(y); } var x = add(-5, 6, Math.abs); // 11 console.log(x); Map map()方法定义在JavaScript的Array中 传入我们自己的函数,就得到了一个新的Array作为结果 将数组里面的元素,按照传入map里面的函数,进行转换 function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] console.log(results); 把Array的所有数字转为字符串 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9'] Reduce 有点难说,看表达式吧,就是将当前元素和下一个进行累积计算 [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) 假设先计算A

《利用python进行数据分析》读书笔记之Numpy基础(二)

时光怂恿深爱的人放手 提交于 2020-02-08 20:07:12
NumPy ndarray:通用函数与面向数组的编程 通用函数 面向数组的编程 将条件逻辑作为数组操作 数学和统计方法 布尔值数组方法 排序 唯一值与其他逻辑集合 通用函数 通用函数,也称为ufunc,可以对ndarray中的元素进行逐个操作,分为一元通用函数和二元通用函数。 一元通用函数:接受一个数组并返回结果,如: arr = np . arange ( 10 ) print ( np . sqrt ( arr ) ) #[0. 1. 1.41421356 1.73205081 2. 2.23606798 #2.44948974 2.64575131 2.82842712 3. ] print ( np . exp ( arr ) ) #[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01 #5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03 #2.98095799e+03 8.10308393e+03] 二元通用函数:接受两个数组并返回结果,如: arr1 = np . array ( [ 1 , 3 , 4 , 7 ] ) arr2 = np . array ( [ 2 , 1 , 5 , 3 ] ) print ( np .

归并排序

安稳与你 提交于 2020-02-08 18:55:01
自己练习,参考的博主在下方 思想: 1,就是将一个混乱的数组分割,直至数组的长度<2, 2,再将他们合并排序为一个短的数组。 3,重复2步骤 4,得到一个有序的数组 时间复杂度:O(nlogn) import java.util.Arrays; public class GuiBing { public static void main(String[] args) { int []arr={19,97,1,8,9,17,3,18,19,1,2,4,6,79,484,54,61,22,33,44,55,66,77,99,444,55,16,23}; int[] sort = sort(arr); System.out.println(Arrays.toString(sort)); } public static int[] sort(int []arr) { arr= Arrays.copyOf(arr,arr.length); //如果递归的数组只有一个元素,那么直接返回,不用经过下面的 if(arr.length<2) { return arr; } //将每次递归的数组切半,直至他不能再被分割 int moddile= (int) Math.floor(arr.length/2); int[] left=Arrays.copyOfRange(arr,0,moddile);

图解排序算法(三)之堆排序

≡放荡痞女 提交于 2020-02-08 17:40:56
图解排序算法(三)之堆排序 预备知识 堆排序   堆排序是利用 堆 这种数据结构而设计的一种排序算法,堆排序是一种 选择排序, 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆    堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] ok,了解了这些定义。接下来,我们来看看堆排序的基本思想及基本步骤: 堆排序基本思想及步骤    堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了 步骤一 构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。   a.假设给定无序序列结构如下 2

二分查找算法(JAVA)

笑着哭i 提交于 2020-02-08 17:38:47
1.二分查找又称折半查找,它是一种效率较高的查找方法。 2.二分查找要求:(1)必须采用 顺序存储结构 (2).必须按关键字大小 有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。     其查找的基本思路:首先将给定值K,与表中中间位置元素的关键字比较,若相等,返回该元素的存储位置;若不等,这所需查找的元素只能在中间数据以外的前半部分或后半部分中。然后在缩小的范围中继续进行同样的查找。如此反复直到找到为止。 4.实现:二分查找的实现用递归和循环两种方式 5.代码: 1 package other; 2 3 public class BinarySearch { 4 /* 5 * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据 6 */ 7 public static int binarySearch(int[] arr, int x) { 8 int low = 0; 9 int high = arr.length-1; 10 while(low <= high) { 11 int middle = (low + high)/2

冒泡排序

北城以北 提交于 2020-02-08 17:09:28
public static void main ( String [ ] args ) { //定义数组 int [ ] arr = { 10 , 2 , 15 , 7 } ; //控制排序轮数 for ( int i = 0 ; i < arr . length - 1 ; i ++ ) { //控制元素 和相邻元素相比较 for ( int j = 0 ; j < arr . length - 1 - i ; j ++ ) { //判断相邻的两个元素 if ( arr [ j ] > arr [ j + 1 ] ) { int temp = arr [ j ] ; arr [ j ] = arr [ j + 1 ] ; arr [ j + 1 ] = temp ; } } } //将数组变量转换成字符串常量 System . out . println ( Arrays . toString ( arr ) ) ; } 来源: CSDN 作者: LC_Struggle 链接: https://blog.csdn.net/LC_Struggle/article/details/104223275

选择排序

怎甘沉沦 提交于 2020-02-08 16:56:20
public static void main ( String [ ] args ) { int [ ] arr = { 10 , 2 , 15 , 7 } ; for ( int i = 0 ; i < arr . length - 1 ; i ++ ) { int min = arr [ i ] ; int minIndex = i ; //遍历右边数据 找到真正最小值 for ( int j = i + 1 ; j < arr . length ; j ++ ) { if ( min > arr [ j ] ) { min = arr [ j ] ; minIndex = j ; } //判断我们认为的最小值与其他元素相比较 } //交换位置 int temp = arr [ i ] ; arr [ i ] = arr [ minIndex ] ; arr [ minIndex ] = temp ; } System . out . println ( Arrays . toString ( arr ) ) ; } 来源: CSDN 作者: LC_Struggle 链接: https://blog.csdn.net/LC_Struggle/article/details/104223409

javascript --- > 瀑布流的实现

蓝咒 提交于 2020-02-08 03:40:32
说明 源代码 1. 瀑布流 出现问题: 设计给的图片不是同一个尺寸大小,因此不能规则的放入到给定的DOM结构中.此时,需要使用瀑布流技术来解决这个问题 解决的思路: 让图片等宽、不等高 核心: 用到了定位 img { position : absolute ; left : 最小的索引 * 图片的宽度 ; top : 最小的图片的高度 ; } 算法如下: 首先获取浏览器的宽度w,用w除以图片盒子的宽度向下取整记为列数: col 利用数组,保存每一列当前的高度 如果是第一行,则将图片的高度保存在数组arr中 如果不是第一行,取出arr中的最小值和索引,计算出绝对定位的位置.并给图片设置绝对定位 1.1 用到的API 1.1.1 获取当前屏幕的宽度 由于每个图片盒子还有对应的高度,因此获取的时候,还要获取内边距. 在jquery中,可以通过 $().outerWidth 实现 var screenWidth = $ ( window ) . outerWidth ( ) 1.1.2 给DOM元素加css样式 $ ( ) . css ( { position : 'absolute' , left : currLeft , top : currTop } ) 1.1.3 总体代码 总体代码如下: $ ( function ( ) { waterFall ( ) } ) function

numpy笔记

时光毁灭记忆、已成空白 提交于 2020-02-07 19:21:35
形状 reshape只是返回改变形状后的预览状态,如使用需赋值。 resize方法的返回结果为空,但是它却真正的改变了组数的形状。 降维 # 在默认排序的情况下,优先按照数组的行顺序,逐个将元素将至一维。 print(arr.ravel()) print(arr.reshape(-1)) print(arr.flatten()) # 如果我们需要按照列的顺序把数组降到一维的话,需要把参数order设置成为"F"。 print(arr.ravel(order='F')) print(arr.reshape(-1, order='F')) print(arr.flatten(order='F')) import numpy as np arr = np.array([[1,10,100], [2,20,200], [3,30,300]]) print(arr) # flatten不会改变元素值 print(arr.flatten()) arr.flatten()[0]=2000 print(arr) # ravel方法会改变元素的值 print(arr.ravel()) arr.ravel()[0]=1000 print(arr) # reshape方法会改变元素的值 print(arr.reshape(-1)) arr.reshape(-1)[0]=3000 print(arr)