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. mysql 与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)

    前言: 目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc, elasticsearch-river-MySQL , g ...

  2. 【入门篇】ANDROID开发之BUG专讲

    话说诸葛亮是一个优秀的程序员,每个锦囊都是应对不同的case而编写的.可是优秀的程序员也敌只是更优秀的bug.六出祈山.七进中原,鞠躬尽瘁,死而后已的诸葛亮仅仅由于有一个错误的case-马谡,整个结构 ...

  3. Windows10 显示库、隐藏6个目录、隐藏OneDrive

    Win10的资源管理器与之前的版本号最大的不同就是默认隐藏了库,又在此电脑中显示了6个用户目录. 但因为习惯了使用库进行文件的管理,这一改变有些令人不习惯. 以下就让我来教大家怎样显示库.以及隐藏这6 ...

  4. Android软键盘状态的切换及其强制隐藏

    MainActivity例如以下: package cc.c; import android.os.Bundle; import android.view.View; import android.v ...

  5. Linux命令(九)——系统监视和进程控制

    与windows系统一样,linux系统中也有很多进程在同时运行,每个进程都有一个识别码PID,它是进程的唯一识别标志. 一.进程的类型 1.系统进程 在操作系统启动后,系统环境平台运行所加载的进程, ...

  6. NAS与SAN有什么区别?

    NAS和SAN字面上相似,并且都是新型数据存储模式,但这二者是完全不同的,针对不同方向的技术,为了能够更好的区分它们,天伟数据恢复整理了以下内容供读者参考(天伟数据恢复建议重要数据多备份,备份很重要以 ...

  7. 查找DLL,并复制出来

    Subst b: %windir%\assembly 执行完后,会发现硬盘分区多了个B盘,打开后看到了所有assembly下的DLL,于是在这里就搜到了Microsoft.ReportViewer.P ...

  8. 使用IDEA搭建一个 Spring + Spring MVC 的Web项目(零配置文件)

    注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration 作用于类上面,声明当前类是一个配置类(相当于一个Spring的xml文件)@C ...

  9. Android拼图-变形金刚

    开篇 学了几个月的Android开发,动手做了一个简单的拼图小游戏,没有使用游戏框架,名字也纯属娱乐,比较粗糙请大家一笑别骂. 游戏界面是一张图片切割的6*6的小图片,并将其中一块拿走,玩家通过不同的 ...

  10. javascript时间戳转换成yyyy-MM-DD格式

    最近开发中需要和后端进日期和时间传值,前后端约定为时间戳的格式,但是前端展示需要展示成年-月-日的格式.就需要进行日期和时间转换格式.自己总结两个方式就行转换. 一,new Date(时间戳).for ...