一、介绍

  ——NumPy库是高性能科学计算和数据分析的基础包,它是Pandas及其它各种工具的基础

  ——NumPy里的ndarry多维数组对象,与列表的区别是:

    - 数组对象内的元素类型必须一样

    - 数组大小不可修改

  ——数组对象的常用属性:

    - T    数组的转置(在多维数组里,将列转成行,行转成列的操作)

    - dtype   数据元素的数据类型

    - size     数组元素的个数

    - ndim    数组的维数

    - shape  数组的维度大小

二、创建ndarray对象

  1、基本创建数组的方法:

import numpy as np #首先需要导入numpy库

#创建一维的narray对象
a1 = np.array([1,2,3,4,5]) #一个列表 #创建二维的narray对象
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) # 一个列表里套两个列表 #创建多维对象以次类推

    指定数据类型:dtype

a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
# int 64
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
# int32
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
# float64
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
# float32

  自带的几种数组创建方法:

  1、zeros:创建全零数组

    a = np.zeros((3,4)) # 数据全为0,3行4列

  2、ones:创建全一数组, 同时也能指定这些特定数据的 dtype:

    a = np.ones((5,3),dtype = np.int) # 数据为1,5行3列

  3、empty:创建全空数组, 其实每个值都是接近于零的数:

    a = np.empty((2,2)) # 数据为empty,2行2列

  4、arange:传值创建连续数组:

a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9] a = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2
print(a) # 返回 [ 5 7 9 11 13 15 17 19]

  5、reshape()函数通常结合arange()函数使用,改变数组的维度

# 将一维数组a变为3*4的数组
a=np.arange(12).reshape((3,4)) # 将a变回为一维数组
a.reshape((12,))

  6、linspace()函数跟arange()函数相似,前两个参数指定序列的开头和结尾,第三个参数指定将数组拆分成几个

np.linspace(0,10,5)
# array([ 0. , 2.5, 5. , 7.5, 10. ])

  7、random()函数使用随机数填充数组

# 生成一维数组
a = np.random.random(3) 
print(a)
# array([ 0.0092522 , 0.44961339, 0.85684498]) # 生成多维数组
a = np.random.random((3,3))
print(a)
# array([[ 0.50311642, 0.25961784, 0.30587642],
[ 0.55388356, 0.92739877, 0.26140058],
[ 0.63482092, 0.45938232, 0.84053653]])
# 生成的都是0~1范围的小数

三、数组基本操作

  1、算术运算符

    算术运算符可以用于数组和标量之间

>>> a=np.arange(4)
>>> a
array([0, 1, 2, 3]) >>> a+4
array([4, 5, 6, 7]) >>> a-4
array([-4, -3, -2, -1]) >>> a*4
array([ 0, 4, 8, 12]) >>> a/2
array([0, 0, 1, 1])

    还可以用于两个数组之间,这两个数组的元素位置必须相同,也就是具有相同的型

>>> a=np.arange(4)
>>> a
array([0, 1, 2, 3]) >>> b=np.arange(4,8)
>>> b
array([4, 5, 6, 7]) >>> a+b
array([ 4, 6, 8, 10]) >>> a-b
array([-4, -4, -4, -4]) >>> a*b
array([ 0, 5, 12, 21]) >>> a/b
array([0, 0, 0, 0]) #整数相除只取商
>>> a**2
array([ 0, 1, 4, 9])
>>> a%b    # 相除后取余数
array([ 0, 5, 12, 21])

  对于多维数组是一样适用的,

>>> A=np.arange(9).reshape((3,3))
>>> A
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]) >>> B=np.ones((3,3))
>>> B
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]) >>> A*B
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])

  2、数组的索引与切片

A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
在这样的二维数组中,每一行有从0开始的索引,每一行里的元素也有自己的索引,所以:
"""
print(A[2])
# [11 12 13 14] print(A[2,2])
# 13

    切片

# 数组也有类似列表的切片操作
A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
""" print(A[1,0:2])
# [7,8] print(A[0:2,1:3])
"""
array([[4, 5]
[8, 9]
[12, 13]])
"""

  Numpy 的 copy & deepcopy:

    = 的赋值方式会带有关联性:

import numpy as np

a = np.arange(4)
# array([0, 1, 2, 3]) b = a
c = a
d = b

    改变a的第一个值,bcd的第一个值也会同时改变。

a[0] = 11
print(a)
# array([11, 1, 2, 3])

    确认bcd是否与a相同。

print(b is a)  # True
print(c is a) # True
print(d is a) # True

    同样的,更改d的值,abc也会改变。

d[1:3] = [22, 33]   # array([11, 22, 33,  3])
print(a) # array([11, 22, 33, 3])
print(b) # array([11, 22, 33, 3])
print(c) # array([11, 22, 33, 3])

    copy()的赋值方式没有关联性

b = a.copy()    # deep copy
print(b) # array([11, 22, 33, 3])
a[3] = 44
print(a) # array([11, 22, 33, 44])
print(b) # array([11, 22, 33, 3])

  3、矩阵常用函数    

    1)最大值最小值

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.max()) #获取整个矩阵的最大值 结果: 6
print(a.min()) #最小值,结果:1 # 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
# 例如 print(a.max(axis=0))
# 结果为 [4 5 6] print(a.max(axis=1))
# 结果为 [3 6] # 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
print(a.argmax(axis=1))
# 结果为 [2 2]

    2)平均值

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.mean()) #结果为: 3.5 # 同样地,可以通过关键字axis参数指定沿哪个方向获取平均值
print(a.mean(axis=0)) # 结果 [ 2.5 3.5 4.5]
print(a.mean(axis=1)) # 结果 [ 2. 5.]

    3)方差:方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.var()) # 结果 2.91666666667 print(a.var(axis=0)) # 结果 [ 2.25 2.25 2.25]
print(a.var(axis=1)) # 结果 [ 0.66666667 0.66666667]

    4)标准差:标准差的函数为std(),std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.std()) # 结果 1.70782512766 print(a.std(axis=0)) # 结果 [ 1.5 1.5 1.5]
print(a.std(axis=1)) # 结果 [ 0.81649658 0.81649658]

    5)中值:中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。

import numpy as np
x = np.array([[1,2,3],[4,5,6]]) print(np.median(x)) # 对所有数取中值
# 结果 3.5 print(np.median(x,axis=0)) # 沿第一维方向取中值
# 结果 [ 2.5 3.5 4.5] print(np.median(x,axis=1)) # 沿第二维方向取中值
# 结果 [ 2. 5.]

    6)求和:矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.sum())           # 对整个矩阵求和
# 结果 21 print(a.sum(axis=0)) # 对行方向求和
# 结果 [5 7 9] print(a.sum(axis=1)) # 对列方向求和
# 结果 [ 6 15]

    7)累积和:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.cumsum())            # 对整个矩阵求累积和
# 结果 [ 1 3 6 10 15 21] print(a.cumsum(axis=0)) # 对行方向求累积和
"""
结果[[1 2 4]
[5 7 9]]
""" print(a.cumsum(axis=1)) # 对列方向求累积和
"""
结果
[[ 1 3 6]
[ 4 9 15]]
"""

 

NumPy库的基本使用的更多相关文章

  1. 安装numpy库

    1.先安装pip: 下载地址:http://pypi.python.org/pypi/pip#downloads 下载pip-8.1.2.tar.gz(md5,pgp)完成之后,解压到一个文件夹,cm ...

  2. Python的numpy库下的几个小函数的用法

    numpy库是Python进行数据分析和矩阵运算的一个非常重要的库,可以说numpy让Python有了matlab的味道 本文主要介绍几个numpy库下的小函数. 1.mat函数 mat函数可以将目标 ...

  3. numpy库:常用基本

    numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...

  4. Python数据分析numpy库

    1.简介 Numpy库是进行数据分析的基础库,panda库就是基于Numpy库的,在计算多维数组与大型数组方面使用最广,还提供多个函数操作起来效率也高 2.Numpy库的安装 linux(Ubuntu ...

  5. 数据分析与展示——NumPy库入门

    这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组 ...

  6. 初识NumPy库-基本操作

    ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...

  7. numpy库常用基本操作

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  8. Numpy库(个人学习笔记)

    一样,咱的计算机还是得先拥有Python,并且安装了Numpy库.有疑问的话可以看这里呦~~~~ 下面开讲: NumPy的主要对象是齐次多维数组.它是一个元素表(通常是数字),并且都是相同类型,由正整 ...

  9. Numpy库的下载及安装(吐血总结)

    Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...

  10. 简单记录numpy库的某些基本功能

    这里介绍python的一个库,numpy库,这个库是机器学习,数据分析最经常用到的库之一,也是利用python做数据必须用到的一个库,入门机器学习学的第一个python库就是它了. 先对其导入到pyt ...

随机推荐

  1. bzoj3168

    二分图+矩阵求逆 既然我们考虑b能替换哪些a,那么我们自然要得出b被哪些a表示,这里我们设一个矩阵C,那么C*A = B 为什么呢?直接A*C = B是不可行的,因为都是行向量,不能直接乘,那么我们转 ...

  2. Lecture 0 --基本说明

    Abstract:本章所记录的知识是后面章节需要的前导知识,请务必仔细读本章,理解涉及的知识点,方便后面章节的学习.本次数据结构笔记主要参考殷人昆的<数据结构(C语言描述)>这本书,需要的 ...

  3. PHP正则匹配中文汉字注意

    preg_match('/^[a-zA-Z\x{4e00}-\x{9fa5}]+$/u', $str) 如上,是匹配字母或者汉字的,一定要在后面加模式修饰符 u , 不然就出错! u (PCRE_UT ...

  4. Qt .pro文件配置大全!

    避免以后的无意义重复劳动,将用过的所有的头文件库文件的配置都放在这里,以后要用的话直接copy就好. eigen3: INCLUDEPATH += \ /usr/local/include/eigen ...

  5. 激光SLAM

    1.激光分类 维度分类: a.二维激光(单点反射.平面.旋转台) b.三维激光 距离分类: a.近距离:壁障.碰撞检测.路边检测 b.远距离:行人检测.定位.建图 特点: 优点: a.可以直接获取深度 ...

  6. Flutter实战视频-移动电商-41.详细页_数据接口的调试

    41.详细页_数据接口的调试 建立数据模型层,我们的业务逻辑分开,然后进行后台数据的调试 生成model类 json数据: { ", "message": "s ...

  7. python3 类 组合

    解决类与类之间代码冗余问题有两种解决方案: 第一 是继承,第二是组合 1:继承   描述的是类与类之间的也就是什么是什么的关系 2: 组合  描述的是类与类之间的关系,  是一种什么有什么的关系的,也 ...

  8. CodeForces Gym 100685J Just Another Disney Problem (STL,排序)

    题意:给定你大小未知的n个数,你允许有不超过一万次的询问,每次询问两个数,第i个数是否比第j个数小?然后后台会返回给你一个结果YES或者NO(即一行输入), 然后经过多次询问后,你需要给出一个正确的原 ...

  9. 为何在有 DOCTYPE 的 HTML 文档之上仍然还会出现混杂模式?

    不使用 DOCTYPE 一定会使 HTML 文档处于混杂模式,然而使用了 DOCTYPE,也不一定就能够使文档在所有浏览器中均处于标准模式. DOCTYPE 本身不就是一个“开关”吗?为何在有 DOC ...

  10. opencv 缩放旋转

    如果100*50的图要转成50*100 角度90或-90 旋转中心应该为 Point2f(image.rows / 2, image.rows / 2); // 图像旋转与缩放 // Author: ...