数组公式

numpy模块

∥☆過路亽.° 提交于 2019-12-04 07:59:15
numpy模块 一、numpy简介 numpy官方文档 numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型numpy数组,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)。 numpy库有两个作用: 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。 二、为什么用numpy lis1 = [1, 2, 3] lis2 = [4, 5, 6] lis1 [1, 2, 3] lis2 [4, 5, 6] 如果我们想让 lis1 * lis2 得到一个结果为 lis_res = [4, 10, 18] ,非常复杂。 三、创建numpy数组 numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法。 import numpy as np # np.array? 相当于pycharm的ctrl+鼠标左键 # 创建一维的ndarray对象 arr = np.array([1, 2, 3]) print(arr, type(arr)) [1 2 3] <class

Java的集合(三)

限于喜欢 提交于 2019-12-04 07:18:30
  8、数组和链表简介       在计算机中要对给定的数据集进行若干处理,首要任务是把数据集中的一部分(当数据非常大时,可能只能一部分一部分地读取数据到内存中来处理)或全部存储到内存中,然后在对内存中的数据进行各种处理。       例如:对如数据集S{1,2,3,4,5,6},要求S中元素的和,首先要把数据存储到内存中,然后再将内存中的数据相加。       当内存空间中有足够大的连续空间时,可以把数据连续的存放在内存中,各种编程语言的数组一般都是按这种方式存储的(也可能有例外),如图 1(b);当内存中只有一些离散的可用空间时,想连续存储数据就非常困难了,这时能想到的一种解决方式是移动内存中的数据,把离散的空间聚集成连续的一块大空间,如图 1(c)所示,这样做当然也可以,但是这种情况因为可能要移动别人的数据,所以会存在一些困难,移动的过程中也有可能会把一些别人的重要数据给丢失。另外一种,不影响别人的数据存储方式是把数据集中的数据分开离散地存储到这些不连续空间中,如图(d)。这时为了能把数据集中的所有数据联系起来,需要在前一块数据的存储空间中记录下一块数据的地址,这样只要知道第一块内存空间的地址就能环环相扣地把数据集整体联系在一起了。C/C++中用指针实现的链表就是这种存储形式。            由上可知,内存中的存储形式可以分别分为 连续存储和离散存储 两种。因此

LeetCode刷题总结-数组篇(番外)

你离开我真会死。 提交于 2019-12-04 06:37:41
本期共7道题,三道简单题,四道中等题。 此部分题目是作者认为有价值去做的一些题,但是其考察的知识点不在前三篇总结系列里面。 例1解法:采用数组索引位置排序的思想。 例2解法:考察了组合数学的组合公式应用。有点类似动态规划的思想。 例3解法: 考察灵活运用二进制和整除余数的数学知识。 例4解法:动态规划思想的应用。 例5解法:分类讨论的数学思想。 例6解法:考察灵活运用哈希字典。 例7解法:考察闰年的数学判断公式,计算周几的细节处理能力。 例1 最大宽度坡 题号:962,难度:中等 题目描述: 解题思路: 采用索引排序的思路,使得从前往后遍历时,A[i] < A[j]。然后不断更新i的最小值,当前遍历的索引即为j。即可求取最终结果。 具体代码: class Solution { public int maxWidthRamp(int[] A) { int N = A.length; Integer[] B = new Integer[N]; for (int i = 0; i < N; ++i) B[i] = i; Arrays.sort(B, (i, j) -> ((Integer) A[i]).compareTo(A[j])); int result = 0; int i = N; for (int j: B) { result = Math.max(result, j - i)

高斯模糊原理,算法

落爺英雄遲暮 提交于 2019-12-04 01:05:11
作者:Hohohong 链接:https://www.jianshu.com/p/8d2d93c4229b 來源:简书 图像卷积滤波与高斯模糊 1.1 图像卷积滤波 对于滤波来说,它可以说是图像处理最基本的方法,可以产生很多不同的效果。以下图来说 图中矩阵分别为二维原图像素矩阵,二维的图像滤波矩阵(也叫做卷积核,下面讲到滤波器和卷积核都是同个概念),以及最后滤波后的新像素图。对于原图像的每一个像素点,计算它的领域像素和滤波器矩阵的对应元素的成绩,然后加起来,作为当前中心像素位置的值,这样就完成了滤波的过程了。 可以看到,一个原图像通过一定的卷积核处理后就可以变换为另一个图像了。而对于滤波器来说,也是有一定的规则要求的。 ① 滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。 ② 滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。 ③ 如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。 ④ 对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。 1.2 卷积核一些用法

Java 8系列之重新认识HashMap

别来无恙 提交于 2019-12-04 00:00:38
摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。 简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类的特点做一些说明: (1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。 (2) Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类

Java8——重新认识HashMap

拟墨画扇 提交于 2019-12-04 00:00:20
摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。 简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类的特点做一些说明: (1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。 (2) Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类

LeetCode刷题总结-数组篇(中)

*爱你&永不变心* 提交于 2019-12-03 20:23:01
本文接着上一篇文章 《LeetCode刷题总结-数组篇(上)》 ,继续讲第二个常考问题: 矩阵问题 。 矩阵也可以称为二维数组。在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历、矩阵位置的旋转、矩阵行或列次序的交换、空间复杂度为O(1)等。本期共12道题,2道简单题,8道中等题,2道困难题。 例1是杨辉三角的一个延申题,是一道非常经典的矩阵习题,本题理想解法是动态规划,但是也可以采用递归来求解。 例2是一道顺时针访问矩阵元素的习题,在不少面试题中有见到。 例3、例4和例5则强调如何利用矩阵本身的空间,来变换矩阵中的元素,即空间复杂度为O(1)。用到了元素间交换和位运算策略,其中相关解法很巧妙。 例6是一道如何移动矩阵的问题。 例7和例8则是考察我们快速理解题意,并在较短时间内完成较高质量代码的能力。即编写的代码争取一次性通过。 例9考察我们如何把二分查找的应用场景由一维数组转换到二维数组。 例10是一道动态规划结合矩阵的经典习题,并且还可以延申出求最短路径的问题。 例11则很有意思,该题是 上篇例6中《和为K的子数组》 的一个升级版,把一维数组的场景变换成了二维的场景,并结合了动态思想,因此题目难度由中等变成了困难。 例12是一道困难级别的习题,该题主要考察我们的数学分析能力,如何灵活变换矩阵的行和列,以及细节的处理能力。 例1 杨辉三角 II 题号:119

快速看懂HashMap

余生颓废 提交于 2019-12-03 19:49:14
在开始之前,先过一遍本博客的重点 • HashMap寻值的速度快是因为HashMap的键会被映射成Hash值,从而避开用equal方法遍历来加快寻值速度。 • HashMap有初始容量和加载因子两个参数来控制性能。当条目大于容量*加载因子时,容量翻一倍。 • HashMap和Hashtable的区别在于线程安全性,同步,以及速度。 下面开始正文 1.HashMap的具体实现 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: HashMap中我们最常用的就是put(K, V)和get(K)。我们都知道,HashMap的K值是唯一的,所以查询和修改数据的时候只要用equal遍历所有的key值就可以了,但我们知道直接遍历查询的时间复杂度为O(n),在数据量比较大时效率不高,所以在java中运用Hash算法来对所有的key进行运算加入数组中。查询的时候直接用数组下标来访问数据(时间复杂度变成了O(1)),以此绕开了用equal遍历带来的效率损失。 HashMap根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null

数组

和自甴很熟 提交于 2019-12-03 11:47:24
定义 :数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 特性 : 线性表 连续的 内存空间 和 相同类型 的数据:随机访问 数组访问越界问题:并不检查数组是否越界,数组访问就是访问内存。 Vector容器 支持动态扩容 为什么动态扩容以成倍的方式扩容: https://blog.csdn.net/bryant_xw/article/details/89524910 二维数组访问公式 ​ address = base_address + (i * n + j) * type_size 来源: https://www.cnblogs.com/Eagleeye1105/p/11794810.html

20182301 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

百般思念 提交于 2019-12-03 11:42:27
20182301 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 第十三章 查找 线性查找:依次将每个值进行查找 Comparable 接口允许多态实现算法,而不是只应用于特定的类 while (result == null&&index<data.length){ if (data[index].compareTo(target)==0) result=data[index]; index++; } 二分查找 Comparable result = null; int first = 0 ,last = data.length-1 while( result ==null && first <=last){ mid =(first + last)/2; if(data[mid].compareTo(target)==0) result=data[mid]; else if(data[mid].compareTo(target)>0) last = mid-1; else first = mid+1; } 排序 选择排序 void SelectSort(int a[],int n) //选择排序 { int mix,temp; for(int i=0;i<n-1;i++) //每次循环数组,找出最小的元素,放在前面,前面的即为排序好的 {