python数组操作

python列表底层实现原理

久未见 提交于 2019-11-28 03:45:59
Python 列表的数据结构是怎么样的? 书上说的是:列表实现可以是数组和链表。 顺序表是怎么回事?顺序表一般是数组。 列表是一个线性的集合,它允许用户在任何位置插入、删除、访问和替换元素。 列表实现是基于数组或基于链表结构的。当使用列表迭代器的时候,双链表结构比单链表结构更快。 有序的列表是元素总是按照升序或者降序排列的元素。 实现细节 python中的列表的英文名是list,因此很容易和其它语言(C++, Java等)标准库中常见的链表混淆。事实上CPython的列表根本不是列表(可能换成英文理解起来容易些:python中的list不是list)。在CPython中,列表被实现为长度可变的数组。 可参考《Python高级编程(第2版)》 从细节上看,Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中。这意味着,每次添加或删除一个元素时,由引用组成的数组需要该标大小(重新分配)。幸运的是,Python在创建这些数组时采用了指数分配,所以并不是每次操作都需要改变数组的大小。但是,也因为这个原因添加或取出元素的平摊复杂度较低。 不幸的是,在普通链表上“代价很小”的其它一些操作在Python中计算复杂度相对过高。 利用 list.insert(i,item) 方法在任意位置插入一个元素——复杂度O(N) 利用 list.pop(i

shell数组与字符串

我的未来我决定 提交于 2019-11-28 02:57:18
数组   数组说白了就是一段连续的变量,一段连续的内存存储空间   解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义   如何去定义数组:     declare -i 定义整数     declare -a 定义数组     declare -A 定义嵌套的数组【不常用】   [python 和 shell]   array=(值)   空数组:array=()   给数组赋值:    1.array[0]=1     (在计算机语言中,索引一般从0开始计算)     (索引不一定是数字:key-value Array[崔广炘] = 1.73m)     (sehll中数组可以跳跃赋值)    2.array=(/var/log/*.log)     做遍历     array=(a b c d)    3.array=('a=187' 'b=189')    4.通过read命令来赋值     read -t 延迟 -p “说明” -a 输入所需的变量值     read -a a b c d   如何调用数组:     ${变量名}     ${数组名[索引]}定义的是那个索引,就看到的是那个索引对应的值     ${数组名}默认调用,索引=0的值     ${数组名[*]}调用数组内所有的值 统计/var/log/*

机器学习之ndarray笔记

删除回忆录丶 提交于 2019-11-27 22:15:20
Numpy的介绍 1. Ndarray:N-dimensional array, N维数组 2. 一种由相同类型的元素组成的多维数组,元素数量是事先指定好的 例:建立Ndarray多维数组 arr = np.array( [ [1,2,3,4], [2,3,4,5] ]) 这是一个二维数组arr.ndim为2 这个数组的形状arr.shape为(2, 4)即2行4列 这个数组的数据类型arr.dtype为int32 3. 元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型 例: np.array(['Python','cctv','ibeifeng','hello world'],dtype='|S4') 输出结果array([b'Pyth', b'cctv', b'ibei', b'hell'], dtype='|S4') 其中S4中的S表示字符串型,4表示每个字符串长度为4,所以输出结果每个数组只有4个字符 arr3 = np.array(['1','2','3','4'],dtype='int') # 表明arr3为整型 # 输出array([1, 2, 3, 4]) arr3 = np.array(['1','2','3','4'],dtype='float') # 表明arr3为浮点型 # 输出array([1., 2.,

numpy 介绍和基础使用详解

风流意气都作罢 提交于 2019-11-27 21:54:51
/*--> */ /*--> */ NUMPY INTRODUCTION NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表结构要高效的多。 高性能科学计算和数据分析的基础包,总结: /*--> */ /*--> */ • NUMPY 是一个 Python 科学计算基础库,提供了多维向量 • NUMPY 提供了用于数组快速操作的方法,数学,逻辑,排序,选择,线性代数,统计等 • NUMPY 采用预编译的 C 代码完成,效率更高 安装: pip install numpy 使用: import numpy as np 行业惯例将np作为numpy,将pd作为pandas。下文所有np均指的是numpy 认识轴: 轴【axis】: 既然是多维数组,先理清一下轴,类似于我们学习的X、Y、Z 二维数组的轴: 图一 三维数组的轴: 图二 使用NUMPY创建数组: 例:创建一个图一的数组 1 2 3 4 5 6 方法1: np.array([]) a=np.array([[1,2,3],[4,5,6]]) b=np.array([range(1,4),range(4,7)]) c=np.array([[i for i in range(1,4)],[i for i in range

第一阶段:Python开发基础 day18 模块的使用(三)

假装没事ソ 提交于 2019-11-27 21:34:52
目录 上节课内容回顾 一、numpy模块 一、numpy简介 二、为什么用numpy 三、创建numpy数组 五、获取numpy数组的行列数 六、切割numpy数组 七、numpy数组元素替换 八、numpy数组的合并 九、通过函数创建numpy数组 十、numpy数组运算 十一、numpy数组运算函数 十二、numpy数组矩阵化 十三、numpy数组数学和统计方法 十四、numpy.random生成随机数 二、pandas模块 一、Series数据结构 三、DataFrame属性 四、DataFrame取值 五、DataFrame值替换 六、读取CSV文件 七、处理丢失数据 九、导入导出数据 十、pandas读取json文件 10.1 orient参数的五种形式 十一、pandas读取sql语句 三、matplotlib模块 一、条形图 二、直方图 三、折线图 四、散点图+直线图 五、饼图 六、箱型图 七、plot函数参数 八、图像标注参数 今日总结 上节课内容回顾 包 一个模块aaa.py中方法太多了, 所以分成多个文件m1.py, m2.py, 把m1.py和m2.py放到名字为aaa的包(含有init文件的文件夹叫包)里 导入aaa包就是导入init, 所以往init里面加入一个f1() import aaa aaa.f1() import aaa aaa.f1() ##

25个最基本的JavaScript面试问题及答案

本秂侑毒 提交于 2019-11-27 17:21:33
1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 尽管 typeof bar === "object" 是检查 bar 是否对象的可靠方法,令人惊讶的是在JavaScript中 null 也被认为是对象! 因此,令大多数开发人员惊讶的是,下面的代码将输出 true (而不是false) 到控制台: var bar = null; console.log(typeof bar === "object"); // logs true! 只要清楚这一点,同时检查 bar 是否为 null,就可以很容易地避免问题: console.log((bar !== null) && (typeof bar === "object")); // logs false 要答全问题,还有其他两件事情值得注意: 首先,上述解决方案将返回 false,当 bar 是一个函数的时候。在大多数情况下,这是期望行为,但当你也想对函数返回 true 的话,你可以修改上面的解决方案为: console.log((bar !== null) && ((typeof bar === "object") || (typeof bar === "function"))); 第二,上述解决方案将返回 true,当 bar 是一个数组(例如,当 var

25个最基本的JavaScript面试问题及答案

时光总嘲笑我的痴心妄想 提交于 2019-11-27 17:21:16
1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 尽管 typeof bar === "object" 是检查 bar 是否对象的可靠方法,令人惊讶的是在JavaScript中 null 也被认为是对象! 因此,令大多数开发人员惊讶的是,下面的代码将输出 true (而不是 false ) 到控制台: var bar = null; console.log(typeof bar === "object"); // logs true! 只要清楚这一点,同时检查 bar 是否为 null ,就可以很容易地避免问题: console.log((bar !== null) && (typeof bar === "object")); // logs false 要答全问题,还有其他两件事情值得注意: 首先,上述解决方案将返回 false ,当 bar 是一个函数的时候。在大多数情况下,这是期望行为,但当你也想对函数返回 true 的话,你可以修改上面的解决方案为: console.log((bar !== null) && ((typeof bar === "object") || (typeof bar === "function"))); 第二,上述解决方案将返回 true ,当 bar 是一个数组(例如,当

理解-NumPy

放肆的年华 提交于 2019-11-27 15:47:19
# 理解 NumPy 在这篇文章中,我们将介绍使用NumPy的基础知识,NumPy是一个功能强大的Python库,允许更高级的数据操作和数学计算。 # 什么是 NumPy? NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical 和 Python 。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务: 机器学习模型 :在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。 图像处理和计算机图形学 :计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。 数学任务 :NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。 # NumPy 的安装 在你的计算机上安装NumPy的最快也是最简单的方法是在shell上使用以下命令: pip install numpy 。 这将在你的计算机上安装最新

Python数据分析-Numpy

放肆的年华 提交于 2019-11-27 15:19:47
Numpy特点 Numpy作为使用Python进行科学计算的常用库,有着如下特点: 提供了N维数组(矩阵),快速高效,矢量数学运算; 高效的Index,不需要循环,因为底层实现采用了C语言开发。 常见的数组和矩阵的方法 数组和矩阵的创建与维度信息 numpy.array() ## 数组的创建 vector = numpy.array([1,2,3,4]) ## 矩阵的创建 matrix = numpy.array([ [1,2,3], [4,5,6], [7,8,9] ]) shape ## 打印数组的维度信息 vector.shape() ——》(4,) # 数组中存在4个元素 ## 打印矩阵的维度信息 matrix.shape()——》(3,3) #三行三列 reshape eg: a = np.arange(15).reshape(3, 5) #随机创建3行5列的矩阵 Out: [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] a.ndim # 返回其维数 即 2 注意: reshape可以创建一个改变了尺寸的新数组,但是原始数组的shape是不会发生变化的。 reshape(-1) :数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。 eg: z = np

day53

拈花ヽ惹草 提交于 2019-11-27 14:15:02
引入方式 Script标签内写代码 <script>//在这里面写JS代码</script> 引入额外的JS文件 <script src="myscript.js"></script> 语言规范 注释 // 单行注释 /* 多行 注释 */ 结束符 JavaScript中的语句要以分号(;)为结束符 JS语言基础 变量声明 JavaScript的变量名可以使用_ ,数字,字母,$组成,不能以数字开头 声明变量使用 var 变量名 ;的格式来进行声明 var name = "Alex"; var age = 18; 注意: 变量名是区分大小写的。 推荐使用驼峰式命名规则。 保留字(关键字)不能用做变量名。 补充: ES6新增了let命令,用于声明变量。其用法类似于var,但是所声明的变量只在let命令所在的代码块内有效。例如:for 循环的计数器就很适合使用let命令。 var=['a','b','c','d'] for (let i=0; i<arr.length; i++){console.log(i)} i ''' 会报错i is not defined at <anonymous>:1:1 ''' 但是 for (var i=0; i<arr.length; i++) {console.log(i)} i """ 不会报错,输出4 """ ES6新增const用来声明常量