一、介绍

中文文档:https://www.numpy.org.cn/

NumPy是Python语言的一个扩展包。支持多维数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy提供了与Matlab相似的功能与操作方式,因为两者皆为直译语言。

NumPy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代Matlab,是一个流行的技术平台。

NumPy中定义的最重要的对象是称为ndarray的N维数组类型。它描述相同类型的元素集合,可以使用基于零的索引访问集合中元素。基本的ndarray是使用NumPy中的数组函数创建的: numpy.array。

NumPy支持比Python更多种类的数值类型。NumPy数值是dtype(数据类型)对象的实例,每个对象具有唯一的特征。

二、生成numpy数组

1、方法一 使用np.array将list转换为numpy数组

  1. x=[[1,2],[3,4],[5,6]]
  2. a=np.array(x) #转换成numpy数组

2、方法二 随机生成numpy数组

  1. import numpy as np
  2.  
  3. a1=np.ndarray([12]) #生成随机的12位的数组
  4. a=np.random.randint(0,10,100)#范围内的整数,长度为100
  5. b=np.random.rand(40)#01的均匀分布,长度为40
  6. c=np.random.randn(10)#标准正态分布,长度为10
  7. d=np.random.normal(0,1,100)#生成指定正态分布,长度为100
  8. e=np.random.random(20)#01的均匀分布,长度20
  9. f=np.random.ranf(20)#01的均匀分布,长度20
  10. g=np.random.uniform(-1,1,100)#指定均匀分布,长度100
  11.  

3、顺序生成数组

  1. import numpy as np
  2. h=np.arange(12)#按顺序生成0-11的数组(类似pythnrange)
  3. b=np.arange(0,12,2)#python list的布长0,2,4,6,8

4、生成零数组、1数组、空数组

  1. import numpy as np
  2.  
  3. #0数组
  4. a= np.zeros(shape=[4,10],dtype=np.float32) #生成4*10的0数组,类型为float32
  5. print(a)
  6.  
  7. #1数组
  8. b=np.ones(shape=[4,10],dtype=np.float32)
  9. print(b)
  10.  
  11. #空数组(前面有0数组或1数组,就更前面一样,没有就是随机的数组)
  12. c=np.empty(shape=[4,10],dtype=np.float32)
  13. print(c)

#生成one-hot数组(将0数组中指定位置的值改成1)

  1. #8,5,2,6(one-hot)
  2.  
  3. a= np.zeros(shape=[4,10],dtype=np.float32)#8,5,2,6(one-hot)
  4. print(a)
  5.  
  6. #遍历,修改对应的值为1
  7. for i,k in enumerate(a):
  8. if i == 0:
  9. k[8]=1
  10. elif i == 1:
  11. k[5]=1
  12. elif i == 2:
  13. k[2]=1
  14. else:
  15. k[6]=1
  16. print(a
  17.  
  18. c=np.argmax(a,axis=1) #1所在的下标
  19. print(c) #[8 5 2 6]

5、将字符串元素转为数值元素

  1. import numpy as np
  2.  
  3. x = np.array(['','','','',''],dtype=np.string_)
  4. y = x.astype(np.int8)#如果元素中有不为数字的元素,则会抛出异常

三、设置numpy数组维度与常用方法

1、设置数组的维度(使用reshape)

  1. #设置3维数组
  2. a=np.ndarray([12]) #定义0-11的12位numpy数组
  3. a1=a.reshape(2,2,3) #2*2*3的数组,(由2组数组,每组数组再由2组数组组成,里面没个数组由3组数组成)
  4.  
  5. #定义2维数组
  6. b=np.arange(12).reshape(3,4) #类似range,从0开始到n的列表(这里是0-11的数字)
  7. print(b)
  8.  
  9. #其它维度也是这么定义的

2、数组的一些属性与方法

  1. import numpy as np
  2.  
  3. b=np.arange((12),dtype=np.float32).reshape(2,2,3) #定义数组类型np.float32
  4.  
  5. #查看数组的一些属性
  6. np.shape(b) #形状,上面reshape的值,如(3,4),(2,2,3)
  7. b.shape #和上面一样,获取形状值
  8. b.size #数组、列表长度 如:12
  9. b.dtype #获取类型,如int32
  10. b.ndim #获取维度
  11.  
  12. #数组复制
  13. a = np.arange(24).reshape(2,3,4)
  14. b = a.copy() #复制
  15.  
  16. #数组排序
  17. a= np.array([12,45,1,6,8,9,32])
  18. a.sort() #排序

3、二维数组的轴使用

  1. import numpy as np
  2.  
  3. a = np.arange(12).reshape(4,3)
  4. a[0,1]=20 #第0组,下标为1的值改为20(1改成20)
  5. print(a)
  6. b=np.argmin(a,axis=1) #[0 0 0 0]
  7. print(b)
  8. c=np.min(a,axis=1) #获取每组数组的第1个数(0下标的值)
  9. print(c)
  10. d=np.max(a,axis=1) #获取每组数组中最大的值
  11. print(d)
  12. c=a[:,0] #获取每组数组0下标的值
  13. print(c)

4、三维数组的轴使用

  1. import numpy as np
  2.  
  3. a = np.arange(24).reshape(2,3,4)
  4. a[0,0,2]=66 #0下标数组,中的第0号下标的数组中下标为2的值改成66(把2改成66)
  5. print(a)
  6.  
  7. b=np.max(a,axis=1) #每个数组中下标相同的值,取下标的最大值,axis代表哪个轴
  8. print(b)
  9. '''结果
  10. [[ 8 9 66 11]
  11. [20 21 22 23]]'''
  12.  
  13. c=np.sum(a,axis=1) #每组中下标相同的值相加的和
  14. print(c)
  15. '''结果
  16. [[12 15 82 21]
  17. [48 51 54 57]]
  18. '''
  19.  
  20. c=np.mean(a,axis=1) #每组中下标相同的值的平均值
  21. print(c)
  22. '''结果
  23. [[ 4. 5. 27.33333333 7. ]
  24. [16. 17. 18. 19. ]]
  25. '''

四、数组的广播机制

1、形状相同的广播

  1. import numpy as np
  2. a=np.arange(12).reshape(4,3)
  3. b=3
  4. c=a+b
  5. print(a)
  6. print(c) #广播后,全部数字加3了

2、形状不相同的广播

形状不相同,后缘维度要相同

  1. import numpy as np
  2.  
  3. a=np.arange(12).reshape(4,3)
  4. print(a)
  5. print()
  6. b=[3,2,1] #后缘维度长度要相同,即上面reshape(4,3)的后面的数和b的长度要一致(3)
  7. print(a+b,'a+b') #每一行都按3,2,1顺序相加,如3+0,2+1,1+2,3+3依次类推

五、numpy数组转置

1、numpy数组转置

  1. import numpy as np
  2.  
  3. a=np.arange(12).reshape(4,3)
  4. b=np.arange(12).reshape(3,4)
  5. c=np.dot(a,b) #转置
  6. print(a)
  7. print(b)
  8. print(c)

2、图像转成np数组

图像的4个维度:N,H,W,C

N:批次中的图像数量
H:图像的高度
W:图像的宽度
C:图像的通道数(例如:3表示RGB,1表示灰度……)

  1. import numpy as np
  2. import PIL.Image as img
  3.  
  4. path="1.jpg"
  5. i=img.open(path)
  6.  
  7. print(np.shape(i)) #(153, 232, 3)
  8. arr = np.array(i) #图片转成numpy数组
  9. # print(arr)
  10. a=np.arange(24).reshape(2,3,4) #设置一个0-23的3维数组
  11. print(a)
  12. b=a.T #T方法转置,
  13. print(b.shape) #(4, 3, 2)
  14. print(b)
  15. c=np.transpose(arr,[1,0,2]) #转置,轴对换 把(153, 232, 3) 改成(232, 153, 3)
  16. print(c)
  17. print(c.shape)

六、numpy数组的切片

1、二维数组的切片

  1. import numpy as np
  2.  
  3. a=np.arange(12).reshape(4,3) #生成numpy数组
  4. b = a[1:,:2] #从下标为1的数组中,0-2(即0,1)下标的值
  5. c = a[0][0] #取下标0的数组中,下标为0的值(0)
  6. d = a[0] #取下标为0的数组
  7. e = a[0][2] #取下标为0的数组中。下标为2的值

2、三维数组的切片

  1. import numpy as np
  2.  
  3. a=np.arange(24).reshape(2,3,4)
  4. b = a[:1,:,2:] #取下标到1的数组(即下标为0,到2就是0,1)中,所有下标数组中,下标从2开始到所有的值
  5. c = a[1,2,1] #取下标为1的数组中下标为2的数组中,下标为1的值
  6. d = a[1][2][3] #取下标为1的数组中下标为2的数组中,下标为2的值

3、其它维度的数组以此类推

七、数组拼接

1、方式一、转成list再append追加

  1. import numpy as np
  2.  
  3. a = np.arange(12).reshape(3,4)
  4. b = np.array([4,5,6,7])
  5. #将b放到a数组的后面
  6. c=a.tolist() #将a转成list类型
  7. c.append(b.tolist())

2、方式二、转成list后使用extend

  1. import numpy as np
  2.  
  3. a=np.arange(12).reshape(3,4)
  4. b=np.array([4,5,6,7])
  5. a=a.tolist()
  6. a.extend([b.tolist()])
  7. print(a)

3、轴拼接

  1. import numpy as np
  2.  
  3. a=np.arange(12).reshape(3,4)
  4. b=np.arange(12).reshape(3,4)
  5. c=np.vstack((a,b)) #将b最佳到a的后面,(拼接0轴)
  6. print(c.shape) #(6, 4)
  7. d=np.hstack((a,b)) #把a和b数组中下标相同的列表合并(拼接1轴)
  8. print(d.shape) #(3, 8)

八、使用numpy采样例子

  1. import numpy as np
  2. import os
  3. import PIL.Image as img
  4.  
  5. path_image = r"F:/test4/img" #图片目录路径
  6.  
  7. class Sample:
  8. '''读取所有图像数据'''
  9. def read_data(self):
  10. self.img_arr=[]
  11. #遍历系统文件夹里的文件名
  12. for name in os.listdir(path_image):
  13. imgs = img.open(r"{0}/{1}".format(path_image,name))
  14. images=(np.array(imgs)/255-0.5)*2#/0.5(除0.5) #神经网络通常不会使用太大的数据。所以除255等操作,尽量归1化(通常使用正负1之间的数据)
  15. self.img_arr.append(images)
  16. return self.img_arr
  17.  
  18. def get_batch(self,set):
  19. '''获取随机数据采样的批次'''
  20. self.read_data()
  21. self.get_arr = []
  22. for i in range(set):
  23. #生成图像个数长度内的一个随机数字
  24. num=np.random.randint(0,len(self.img_arr))
  25. #将生成的随机数作为图像数据集的索引
  26. imge=self.img_arr[num]
  27. #把得到的随机图像数据累计起来
  28. self.get_arr.append(imge)
  29. return self.get_arr
  30.  
  31. sample=Sample()
  32. # sample.read_data()
  33. #查看随机图像批次形状(4维数组)
  34. print(np.shape(sample.get_batch(100))) #100张,48*48尺寸的图片,图像的通道数(例如:3表示RGB)
  35. #查看随机获得的图像数据
  36. sample.get_batch(10)

  

九、pandas简单使用

1、pandas介绍

pandas是基于NumPy构建的,让以NumPy为中心的应用变得更加简单

2、pandas简单实用

  1. import numpy as np
  2. from pandas import Series,DataFrame
  3.  
  4. #左边是索引,右边是数据
  5. a=Series([1,2,3,4],dtype=np.float32) #创建Series数据结构,类型为np.float32
  6. print(a)
  7. '''
  8. 0 1.0
  9. 1 2.0
  10. 2 3.0
  11. 3 4.0
  12. dtype: float32
  13. '''
  14. print(a.values) #值[1,2,3,4]
  15. print(a.index) #RangeIndex(start=0, stop=4, step=1) #长度0-4,布长为1
  16.  
  17. #自定义索引(值和索引长度一样)
  18. b=Series([4,5,6,7],index=["a","b","c","d"])
  19. print(b)
  20. '''
  21. a 4
  22. b 5
  23. c 6
  24. d 7
  25. dtype: int64
  26. '''
  27.  
  28. b["a"]=8 #改变索引为"a"的值为8
  29. print(b)
  30. #自定义索引方式二
  31. b=Series({"A":1,"B":2})
  32. print(b)
  33.  
  34. #DataFrame类型,类似课表或者excel表格一样,拥有行索引和列索引
  35. c=DataFrame(data=[[2,4,6],[7,8,3],[4,7,5]],index=["d","e","f"],columns=["a","b","c"])
  36. print(c)
  37. '''
  38. a b c
  39. d 2 4 6
  40. e 7 8 3
  41. f 4 7 5
  42. '''

numpy 介绍与使用的更多相关文章

  1. Python for Data Analysis 学习心得(一) - numpy介绍

    一.简介 Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的 ...

  2. Python数据分析--工具安装及Numpy介绍(1)

    Anaconda 是一个跨平台的版本,通过命令行来管理安装包.进行大规模数据处理.预测分析和科学计算.它包括近 200 个工具包,大数据处理需要用到的常见包有 NumPy . SciPy . pand ...

  3. python numpy 介绍

    NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object).ndarray(下文统一称之 ...

  4. python(5):scipy之numpy介绍

    python 的scipy 下面的三大库: numpy, matplotlib, pandas scipy 下面还有linalg 等 scipy 中的数据结构主要有三种: ndarray(n维数组), ...

  5. numpy 介绍

    NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩 ...

  6. numpy 介绍和基础使用详解

    NUMPY INTRODUCTION NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表 ...

  7. numpy数组的操作

    numpy - 介绍.基本数据类型.多维数组ndarray及其内建函数 http://blog.csdn.net/pipisorry/article/details/22107553 http://w ...

  8. 深度学习之Numpy整理

    一.Numpy介绍.为什么要用Numpy 1.Numpy介绍 Numpy是Python的一个扩展包,语法和Matlab有很多相似之处.它支持高维数组和矩阵运算,也提供了许多数组和矩阵运算的函数.另外, ...

  9. Numpy 和 Matplotlib库的学习笔记

    Numpy介绍 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数.傅里 ...

随机推荐

  1. python的list()函数

    list()函数将其它序列转换为 列表 (就是js的数组). 该函数不会改变   其它序列 效果图一: 代码一: # 定义一个元组序列 tuple_one = (123,','abc') print( ...

  2. Python线程-死锁

    死锁产生的4个必要条件:    1.互斥:一个资源同一时刻只允许一个线程进行访问.    2.占有未释放:一个线程占有资源,且没有释放资源.    3.不可抢占:一个已经占有资源的线程无法抢占到其他线 ...

  3. redis 数据类型之列表

    1.lpush lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最左边 # 如: # conn.lpush('oo', 11,22,33) # ...

  4. Django redis 应用

    一.自定义连接池 与python中使用连接池一样(使用单例对象) 注意:每个视图函数都要有 conn = redis.Redis(connection_pool=POOL) 二.使用第三方模块(dja ...

  5. spring boot部署中executable的系统服务

    首先在pom.xml 中添加spring boot插件,并设置 <plugins> <plugin> <groupId>org.springframework.bo ...

  6. CQBZOJ 【重庆市NOIP模拟赛】避难向导

    题目描述 "特大新闻,特大新闻!全国爆发了一种极其可怕的病毒,已经开始在各个城市 中传播开来!全国陷入了巨大的危机!大量居民陷入恐慌,想要逃到其它城市以 避难!经调查显示,该病毒来自于C 市 ...

  7. Quartz.Net和队列应用demo

    using System; using System.Collections.Generic; using System.Threading; namespace ConsoleApplication ...

  8. PPT制作简易套路指南

    最近正在重做公众号相关的一些设计以及排版,想到年前部门里的UI设计大神做了一个关于"PPT设计指南"的分享,正好可以拿来实践一把. 一直以来,PPT.Word.Excel都是办公人 ...

  9. HashMap 详细讲解

    ---------------------------  剩下的时间不多了,抓紧做自己的事情 1.HashMap 的实质 Hashmap =   数组   +   链表  +   红黑树 (jdk 1 ...

  10. 017.Python函数匿名函数

    匿名函数 lambda表达式 lambda表达式 : 用一句话来表达只具有返回值的函数,简单,方便,直截了当 # 语法: lambda 参数 : 返回值 无参数的lambda 表达式 def func ...