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计算的要快。

Vectorize函数:对numpy数组中的每一个元素应用一个函数。
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----数组的更多相关文章

  1. python笔记 - day3

    python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...

  2. python笔记05

    python笔记05 数据类型 上个笔记知识点总结: 列表中extend特性:extend,(内部循环,将另外一个列表,字符串.元组添加到extend前的列表中) li.extend(s),将s中元素 ...

  3. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  4. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  5. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  6. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  7. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  8. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  9. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  10. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

随机推荐

  1. redis-事务-transaction

    redis的目标的是: 简洁,高效,由于事务本身就是一个很复杂的东西,所有我们不能把事务做的太复杂... multi,exec 127.0.0.1:6379> multi OK 127.0.0. ...

  2. Mycat连接数据库之后导致表名全小写的问题分析研究

    初步研究:通过部署发现在Mycat中部署逻辑表表名大小写混合时,在Mycat连接后出现全变小.容易造成错误逻辑表(按混合表名创建物理表): 可能拯救的方法: 1.Linux下部署安装MySQL,默认不 ...

  3. Android--真机调试程序方法

    方法例如以下: (1)手机通过数据线连接到手机上. (2)在手机中设置:设置-->应用程序-->开发-->USB调试 (3)在CMD中測试一下.连接是否正常,CMD中命令例如以下: ...

  4. root用户不能改动iptables

    需求:因为防火墙做了IP和port限制,如今须要加入一条规则使之能够訪问指定的IP和port. vi /etc/sysconfig/iptables, 加入完毕后,wq保存,提示文件仅仅读无法保存.! ...

  5. 【JEECG技术博文】Local storage &amp; easyui extensions

    1. Local storage背景 cookie弊端:同域内http请求都会带cookie,添加带宽和流量:有个数和限制大小(约4K). 在HTML5中,本地存储是一个window的属性.包含loc ...

  6. HDU Distinct Values

    /* 一开始想到的是 对于每个区间操作 先按左端点排序(包含的区间 留这打的区间) 我们维护pos表示 a数组找到了哪 对于当前这个区间 只需要找 pos--r这个区间 用set维护能用的数 没放到a ...

  7. Getting started with ASP.NET Core MVC and Visual Studio

    This tutorial will teach you the basics of building an ASP.NET Core MVC web app using Visual Studio ...

  8. Reorder List 最典型的linkedlist题目

    https://oj.leetcode.com/problems/reorder-list/ Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder ...

  9. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  10. ubuntu-设置分辨率

    xrandr -s 1440x900 -r 60 前提是,分辨率选项中有对应的设置选项.