Python笔记6----数组
1、Python 中的数组
形式:
- 用list和tuple等数据结构表示数组
一维数组:list=[1,2,3,4]
二维数组:list=[[1,2,3],[4,5,6],[7,8,9]]
- 用array模块:array模块需要加载,而且运用的较少
通过array函数创建数组(数组中的元素可以不是同一种类型),array.array('B',range(5)) >>array('B',[1,2,3,4,5])
提供append、insert和read等函数
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。
(来自链接http://old.sebug.net/paper/books/scipydoc/numpy_intro.html)
2、ndarray
ndarray是Numpy中的基本数据结构,所有元素是同一种类型,优点:节省内存和提高CPU计算时间,有丰富的函数。
0:作用对象是index; 1:作用对象是columns。

(1)数组的创建:
import numpy as np
①array函数创建:x=np.array([(1,2,3),(4,5,6)])
创建一维数组:np.array([元素1,元素2,……])
创建二维数组:np.array ( [ [ 元素1,元素2……] , [ 元素1,元素2,…… ] ,[ ] , [ ] ] )
②arange: x=np.arange(1,5,0.5) >>array([1.,1.5,2.,2.5,3.,3.5,4.,4.5])
③random: x=np.random.random((2,2)) >>array([[0.7999243,0.3454323].[0.3546543,0.4634535]])
④linspace: x=np.linspace(1,2,5,endpoint=False) >>array([1.,1.2,1.4,1.6,1.8])
⑤ones: x=np.ones([2,3]) >>array([[1.,1.,1.],[1.,1.,1.]])
⑥zeros: x=np.zeros((2,2)) >>array([[0.,0.],[0.,0.]])
⑦fromfunction: x=np.fromfunction(lamda i,j:(i+1)*(j+1),(9,9))
结果为9*9乘法表。array([[1,2,3,4,5,6,7,8,9],
[2,4,6,8,10,12,14,16,18],
[3,6,9……]
……
[9,18,……,81]])
(2)数组的操作:
①array[1] :选择第二行所有元素
array[0:2]:选择从第一行到第二行的所有元素(索引2不包括,即第三行)
array[:,[0,1]]:选择所有行的第一列和第二列的元素
array[1,[0,1]]:选择第二行第1列和第2列的元素
②shape:数组的维数,shape[0]取行数,shape[1]取列数。
③size:元素总个数
④reshape():改变数组的大小。但是原数组不变,即aArray不变,变化结果在bArray
aArray=np.array([[1,2,3],[4,5,6]]) bArray=aArray.reshape(1,6)
>> aArray=array([[1,2,3],[4,5,6]])
>> bArray=array([[1,2,3,4,5,6]])
⑤resize():改变数组的大小。原数组改变了,即aArray变了
aArray.resize(1,6)
>> aArray= array([[1,2,3,4,5,6]])
⑥vstack():垂直方向拼接。
cArray=np.array([[7,8,9]])
np.vstack((aArray,cArray))
>>array([[1,2,3],
[4,5,6],
[7,8,9]])
⑦hstack():水平方向拼接。
np.hstack((aArray,cArray))
>> array([[1,2,3,4,5,6,7,8,9]])
⑧+:(两个大小不同的数组相加,是一种广播的思想)
aArray+cArray >>array([[8,10,12],[11,13,15]])
⑨sort(): 排序 ,一维数组x排序,x.sort()
二维数组y=([[3,1,2],[6,3,1]])排序是对每一行进行排序,y.sort(),结果为y=([[1,2,3],[1,3,6]])
统计运算:
①sum():所有元素的求和,aArray.sum()
②sum(axis=0):列求和
③min():所有元素最小值,aArray.min()
④argmax():返回最大值的索引
⑤mean():所有元素的均值
⑥var():方差
⑦std():标准差
线性代数:np.linalg模块中的函数
①np.linalg.det(x):行列式
②np.linalg.inv(x):逆矩阵
③np.dot(x,x):x的内积
④np.linalg.solve():多元一次方程组求根
⑤np.linalg.eig():求特征值和特征向量
ufunc函数:

同样的计算numpy的通用计算比math计算的要快。
a = np.array([[[1, 2], [1]],
[[2, 3, 3], [3, 4]]
])
print(a.shape)
count_fun = np.vectorize(lambda x: len(x))
print(count_fun(a))
Python笔记6----数组的更多相关文章
- python笔记 - day3
python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...
- python笔记05
python笔记05 数据类型 上个笔记知识点总结: 列表中extend特性:extend,(内部循环,将另外一个列表,字符串.元组添加到extend前的列表中) li.extend(s),将s中元素 ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
随机推荐
- 修改Xorg.conf配置显示分辨率
修改Xorg.conf是件简单的事,配置文件结构简单,也没有复杂的语法,但是一但配置失败,后果是比较 严重的,,所以强烈建议每次修改之前做好备份工作. Xorg.conf一般位于/etc/X11/xo ...
- 1013MySQL监控利器-Innotop
转自 http://www.cnblogs.com/ivictor/p/5101506.html 安装过程中 可以使用 YUM INSTALL INNOTOP进行直接安装 Innotop是一款十分强大 ...
- Spring Boot错误:Unable to start embedded container...的问题解决
解决方法: 1.用错了注解,改用以下注解: @SpringBootApplication 相当于:@Configuration.@ServletComponentScan.@EnableAutoCon ...
- Spring注解@Repository、@Service、@Controller、@Component
继前几章所讲解的注解中: http://www.cnblogs.com/EasonJim/p/6892280.html http://www.cnblogs.com/EasonJim/p/689974 ...
- pl/sql developer 布局结构保存
pl/sql developer 布局结构保存 调整了工具栏,调整了窗体框位置,点击 窗口->保存版面 就可以保留当前的调整的结果,不用一次一次调整了: 也可以在工具 -> 首选项 -&g ...
- NPOI文件导入操作
using EntMSM.SmsDbContext; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserM ...
- 齐头并进完成任务——Java多线程(一)
多线程(Multithread)指的是在单个进程中同时运行多个不同的线程,执行不同的任务.多线程意味着一个程序的多行语句块并发执行. 一.实现多线程 1.通过继承Thread类实现多线程. Threa ...
- java中与运算,或运算,异或运算,取反运算
//与运算 & 规则 :都为1时才为1 System.out.println( 7 & 9); /* * 7二进制 0111 ...
- sublime界面主题
一直以来都是使用的SUBLIME,真的很强大. 最近刚转到linux来学习C,把它重新配置了一遍,默认的字体颜色的搭配已经很不错了.不过界面的样子还是不太习惯.重新安装了下soda这个主题包,惭愧!即 ...
- Node.js:安装配置
ylbtech-Node.js:安装配置 1.返回顶部 1. ode.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v4.4 ...