Numpy 基础学习

Numpy是python科学计算的基础包,为python提供快速的数组处理能力,也可以作为在算法之间传递数据的容器

安装相关软件包

安装需要的包

pip3 install numpy/pandas/mtaplotlib/ipython/scipy/xlrd/lxml/basemap/pymogo/PyQt/statsmodels/PyTables

验证ipython

Numpy

NumPy的主要对象是同质多维数组。它是一张表,所有元素(通常是数字)的类型都相同,并通过正整数元组索引。在NumPy中,维度称为轴。轴的数目为秩rank。

ndarray 是一个数据多维容器,所以,其中所有的元素类型必须是相同的,每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)

Numpy的ndarray:一种多维数组对象

例如:

3D空间中的点的坐标[1, 2, 1]是rank为1的数组,因为它具有一个轴。该轴的长度为3。在下面所示的示例中,数组的rank为2(它是2维的)。

第一维度(轴)的长度为2,第二维度的长度为3。
[[ 1., 0., 0.],[ 0., 1., 2.]]

NumPy的数组的类称为ndarray。别名为array

实例代码与说明:

In [48]: import numpy as np

In [49]: a = np.arange(15).reshape(3,5)  #reshape可以理解为设置维度,3行5列

In [50]: a
Out[50]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])

数组的维度shape。这是一个整数的元组,表示每个维度中数组的大小。

对于具有n行和m列的矩阵,shape将是(n,m)。 因此,shape元组的长度就是rank或维度的个数ndim。

In [51]: a.shape
Out[51]: (3, 5)

In [52]: a.ndim    ##数组的轴(维度)的个数。在Python中,维度的数量被称为rank。
Out[52]: 2

In [58]: a.size    ##数组元素的总数。这等于shape的元素的乘积。
Out[58]: 15

##数组中每个元素的字节大小。例如,元素为float64类型的数组的itemsize为8(=64/8),而complex32类型的数组的comitemsize为4(=32/8)。它等于ndarray.dtype.itemsize。
In [53]: a.itemsize
Out[53]: 8

In [54]: type(a)
Out[54]: numpy.ndarray

In [55]: b = np.array([6,7,8])

In [56]: b
Out[56]: array([6, 7, 8])

 创建数组

创建数组最简单的方法用array函数,array函数会为数组推断出一个合适的数据类型,数据类型保存在dtype对象中,例如

In [4]: data = [5,3,11,2.3,0]

In [5]: arr1 = np.array(data)

In [6]: arr1
Out[6]: array([  5. ,   3. ,  11. ,   2.3,   0. ])

In [7]: data2 = [[1,2,4,5],[5,6,7,8]]

In [8]: arr2 = np.array(data2)

In [9]: arr2
Out[9]:
array([[1, 2, 4, 5],
       [5, 6, 7, 8]])

In [10]: arr1.dtype
Out[10]: dtype(‘float64‘)

In [11]: arr2.dtype
Out[11]: dtype(‘int32‘)

python内置函数range函数的数组版arange

In [12]: np.arange(15)
Out[12]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

 ndarray的数据类型 dtype

dtype 用于说明数组数据类型的对象

dtype含有ndarray将一块内存解释为特定数据类型所需的信息,语法

arr3 = np.array([数组],dtype=np.float64)        #数组类型

通过astype方法转化dtype

arr1 = np.array([5,3,11,2.3,0])
float_arr = arr1.astype(np.float64)

如果数组元素都为字符串可用astype转换为数值类型,调用astype会创建出一个新的数组,即使新数组和老数组dtype相同

如果浮点型数组转换为整数,小数点后面的将会被截断,并且不会四舍五入

数组间的转换

数组A = 。。
数组B = 。。
数组A.astype(数组B.dtype)

数组运算(矢量化)

数组与标量的算数运算应用到每个值

In [13]: arr1
Out[13]: array([  5. ,   3. ,  11. ,   2.3,   0. ])

In [14]: arr1 * arr1
Out[14]: array([  25.  ,    9.  ,  121.  ,    5.29,    0.  ])

In [15]: arr1 - arr1
Out[15]: array([ 0.,  0.,  0.,  0.,  0.])

In [16]: 1 / arr1
C:\Program Files\Python35\Scripts\ipython3:1: RuntimeWarning: divide by zero encountered in true_divide
Out[16]: array([ 0.2       ,  0.33333333,  0.09090909,  0.43478261,         inf])

In [17]: 1 / arr1 ** 0.5
C:\Program Files\Python35\Scripts\ipython3:1: RuntimeWarning: divide by zero encountered in true_divide
Out[17]: array([ 0.4472136 ,  0.57735027,  0.30151134,  0.65938047,         inf])

In [18]:

索引和切片

一维数组

In [25]: arr = np.array([4,3,6,7,2,7,9,8])      #一维数组与python的列表取值方式一样

In [26]: arr
Out[26]: array([4, 3, 6, 7, 2, 7, 9, 8])

In [27]: arr[0]
Out[27]: 4

In [28]: arr[1]
Out[28]: 3

In [29]: arr[3:6]            #取值索引为 3,4,5的值
Out[29]: array([7, 2, 7])

In [30]: arr[3:6] = 11          #赋值为所有

In [31]: arr
Out[31]: array([ 4,  3,  6, 11, 11, 11,  9,  8])

二维数组

各索引位置上的值不再是一个标量,而是一个一维数组(python里的列表)

In [33]: arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])  #shape为(3,3)
In [34]: np.ndim(arr2d)      #二维数组查看方法
Out[34]: 2

In [35]: arr2d[2]
Out[35]: array([7, 8, 9])

所以,可以对单个元素进行递归访问

In [35]: arr2d[2]
Out[35]: array([7, 8, 9])

In [36]: arr2d[2][0]
Out[36]: 7

二维数组索引方式

多维数组索引

In [37]: arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9,],[10,11,12]]])

In [38]: arr3d
Out[38]:
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [39]: arr3d[0]              #取第一个值
Out[39]:
array([[1, 2, 3],
       [4, 5, 6]])

In [40]: arr3d[0] = 42          #给元素赋值

In [41]: arr3d[0]
Out[41]:
array([[42, 42, 42],
       [42, 42, 42]])

In [42]: arr3d              #新的数组
Out[42]:
array([[[42, 42, 42],
        [42, 42, 42]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [43]: arr3d[1,0]          #多维数组元素取值,等同于 arr3d[1][0]
Out[43]: array([7, 8, 9])

切片索引

二维数组切片

ndarry的切片语法跟python列表的取值差不多,例

In [45]: arr2d
Out[45]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [46]: arr2d[:2]
Out[46]:
array([[1, 2, 3],
       [4, 5, 6]])

#一次传入多个切片取值

 In [47]: arr2d[:2,1:]        #取前两行的值,再取其索引为1及以后的值
 Out[47]:
 array([[2, 3],
      [5, 6]])

#对高维数组切片

  arr2d[:,:1]        #算作是语法

布尔型索引

布尔型数组可用于数组索引,布尔型数组的长度必须与被索引的轴的长度一致

In [48]: names = np.array([‘Bob‘,‘Joe‘,‘will‘,‘Bob‘,‘will‘,‘Joe‘,‘Joe‘])

In [49]: data = randn(7,4)

In [50]: names
Out[50]:
array([‘Bob‘, ‘Joe‘, ‘will‘, ‘Bob‘, ‘will‘, ‘Joe‘, ‘Joe‘],
      dtype=‘<U4‘)

In [51]: data
Out[51]:
array([[ 0.10178629, -1.07043495,  0.39996302,  0.86182796],
       [-0.4353786 , -0.03595137, -0.50582915,  0.72286381],
       [-0.08335713, -0.88924282, -0.34335741, -1.11461641],
       [-0.69570247,  2.41029154, -0.62120433, -0.54820488],
       [-0.56408913, -0.43663855,  0.00482595,  0.36397724],
       [-0.32140443, -1.84666651,  0.11527445, -2.36827836],
       [-1.72703212,  0.13889588,  0.93259899, -0.92023785]])

 

 In [57]: names == ‘Bob‘
 Out[57]: array([ True, False, False, True, False, False, False], dtype=bool)

 In [58]: data[names==‘Bob‘]      #根据名称的索引取data里的值
 Out[58]:
 array([[ 0.10178629, -1.07043495, 0.39996302, 0.86182796],
    [-0.69570247, 2.41029154, -0.62120433, -0.54820488]])

 In [59]: data[names==‘Bob‘,2:]    #取值,与切片整数混合使用
 Out[59]:
 array([[ 0.39996302, 0.86182796],
     [-0.62120433, -0.54820488]])

 

 #选择非值操作,可使用!= 或者 - 符号表示非值,例:

 In [62]: names != ‘Bob‘

  Out[62]: array([False, True, True, False, True, True, True], dtype=bool)

 In [64]: data[-(names == ‘Bob‘)]

 Out[64]:
 array([[-0.4353786 , -0.03595137, -0.50582915, 0.72286381],
  [-0.08335713, -0.88924282, -0.34335741, -1.11461641],
  [-0.56408913, -0.43663855, 0.00482595, 0.36397724],
  [-0.32140443, -1.84666651, 0.11527445, -2.36827836],
  [-1.72703212, 0.13889588, 0.93259899, -0.92023785]])

 #将data中的负值设置为0

 In [69]: data[data<0]
 Out[69]:
 array([-1.07043495, -0.4353786 , -0.03595137, -0.50582915, -0.08335713,
    -0.88924282, -0.34335741, -1.11461641, -0.69570247, -0.62120433,
    -0.54820488, -0.56408913, -0.43663855, -0.32140443, -1.84666651,
    -2.36827836, -1.72703212, -0.92023785])

 In [70]: data[data<0] = 0

 In [71]: data
 Out[71]:
 array([[ 0.10178629, 0. , 0.39996302, 0.86182796],
    [ 0. , 0. , 0. , 0.72286381],
    [ 0. , 0. , 0. , 0. ],
    [ 0. , 2.41029154, 0. , 0. ],
    [ 0. , 0. , 0.00482595, 0.36397724],
    [ 0. , 0. , 0.11527445, 0. ],
    [ 0. , 0.13889588, 0.93259899, 0. ]])

 In [72]:

#通过一维布尔数组设置正行或整列的值

 In [74]: data[names != ‘Joe‘] = 0

 In [75]: data
 Out[75]:
 array([[ 0. , 0. , 0. , 0. ],
    [ 0. , 0. , 0. , 0.72286381],
    [ 0. , 0. , 0. , 0. ],
    [ 0. , 0. , 0. , 0. ],
    [ 0. , 0. , 0. , 0. ],
    [ 0. , 0. , 0.11527445, 0. ],
    [ 0. , 0.13889588, 0.93259899, 0. ]])

 In [76]:

花式索引

花式索引是利用整数进行索引

一次性传入多个索引数组

数组转置和轴对换

通用函数

原文地址:https://www.cnblogs.com/FRESHMANS/p/8490857.html

时间: 2024-11-06 07:26:06

Numpy 基础学习的相关文章

Numpy基础学习

Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包. 主要的功能: 1.ndarray,一个具有矢量运算和复杂广播工能的快速且节省空间的多维数组 2.用于对整组数据进行快速运算的标准数据函数(无需编写循环) 3.用于读写磁盘数据的工具以及用于操作内存映射文件的工具 4.线性代数.随机数生成以及傅里叶变换功能 5.用于集成由C.C++.Fortran等语言编写的代码的工具 一.Numpy的ndarray:一种多维数组对象. numpy最重要的特点: 1.其N维数

[转]python与numpy基础

来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb python与numpy基础 寒小阳(2016年6月) Python介绍 如果你问我没有编程基础,想学习一门语言,我一定会首推给你Python类似伪代码的书写方式,让你能够集中精力去解决问题,而不是花费大量的时间在开发和debug上同时得益于Numpy/Scipy这样的科学计算库,使得其有非常高效

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Linux新手入门书籍推荐 鸟哥的linux私房菜-基础学习篇

这本书写的不错.赞~\(≧▽≦)/~ 2017-02-24 下午,我开始在Linux下写第一个.c程序,在终端打印hello world.gcc 源代码文件之后,输出可执行文件,但是 当我输入文件名执行它的时候,却提示我 无法找到命令.于是我找百度,查资料,花了半个小时,终于找到解决方法了, 输入"./filename"即可.... 2017-02-25 我看<基础学习篇>这本书,在P158页下面的例题讲解中找到了昨天下午异常的解析.我就很是感慨,心想:要是早看这本书,半个

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们

HTML&CSS基础学习笔记13—无序列表

无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无序列表,列表里的项目则用<li>标签来表示: 1 2 3 4 5 <ul>     <li></li>     <li></li>     ... </ul> 看一段实例代码: 对于的浏览器显示结果是这样的: 更多内容学习,请