NumPy学习(1)

参考资料:

  1. http://www.cnblogs.com/zhanghaohong/p/4854858.html
  2. http://linusp.github.io/2016/02/25/creation-and-io-of-ndarray.html

数组的创建

数组属性

数组元素获取-普通索引、切片、布尔索引、花式索引

统计函数与线性代数运算

随机数的生成

NumPy数组:NumPy数组是一个多维数组对象,称为ndarray。

数组的创建

一维数组的创建【随机、list、tuple】

In [15]: import numpy  as np    #导入numpy包

##创建一个10个随机数的列表
In [16]: ls1=range(10) #生成一个10个随机数的列表
In [17]: ls1
Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [18]: type(ls1) #查看类型
Out[18]: list In [19]: ls2=np.arange(10) #np.arrange(10,100,10) #生成一个随机数的一维数组
In [20]: ls2
Out[20]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [21]: type(ls2)
Out[21]: numpy.ndarray #类型为数组 In [24]: arr1 = np.array([1,2,3,4]) #从list对象中创建数组
In [25]: arr1
Out[25]: array([1, 2, 3, 4])
In [26]: type(arr1)
Out[26]: numpy.ndarray In [27]: arr2 = np.array((1,2,3,4)) #从tuple中创建数组
In [28]: arr2
Out[28]: array([1, 2, 3, 4])
In [29]: type(arr2)
Out[29]: numpy.ndarray

二维数组的创建【列表套列表、元组套元组】


In [30]: arr3 = np.array([[1,2,3],[4,5,6],[7,8,9]]) #列表中套列表的方式创建
In [31]: arr3
Out[31]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [32]: type(arr3)
Out[32]: numpy.ndarray In [33]: arr4 = np.array(((1,2,3),(4,5,6),(7,8,9))) #元组套元组的方式创建
In [34]: arr4
Out[34]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [36]: type(arr4)
Out[36]: numpy.ndarray

几种特殊的数组【zeros、ones、empty】

In [42]: arr5=np.zeros(5)   #返回5个0的一维数组
In [43]: arr5
Out[43]: array([ 0., 0., 0., 0., 0.])
In [44]: arr6=np.zeros((3,6)) #返回全为03x6的二维数组
In [45]: arr6
Out[45]:
array([[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.]]) In [46]: arr7=np.ones(5) #返回5个1的一维数组
In [47]: arr7
Out[47]: array([ 1., 1., 1., 1., 1.])
In [48]: arr8=np.ones([2,4]) #返回2x4的二维数组
In [49]: arr8
Out[49]:
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]) In [50]: arr9=np.empty(4) #返回4个全为0的一维数组
In [51]: arr9
Out[51]: array([ 0., 0., 0., 0.])
In [52]: arr10=np.empty((3,5)) #返回全为0的数组不安全,一般返回的事未初始化的垃圾值
In [53]: arr10
Out[53]:
array([[ 0.00000000e+000, 6.79335389e-314, 0.00000000e+000,
1.27319747e-313, 1.27319747e-313],
[ 1.27319747e-313, 2.96439388e-323, 1.90979621e-313,
0.00000000e+000, 5.92878775e-323],
[ 3.18299369e-313, 0.00000000e+000, 8.89318163e-323,
6.95038501e-310, 6.32404027e-322]]) 可以使用dtype来指定ndarray的数据类型,如
In [54]: arr1=np.array([1,2,2,3],dtype=np.float64)
In [55]: arr1
Out[55]: array([ 1., 2., 2., 3.])
In [56]: arr1.dtype
Out[56]: dtype('float64')

数组的属性与数组的函数

属性

In [57]: arr3
Out[57]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [58]: arr3.shape #shape返回数组的行数和列数
Out[58]: (3, 3) In [59]: arr3.ndim #ndim返回数组的维数
Out[59]: 2 In [61]: arr3.dtype #dtype返回数组元素数据类型
Out[61]: dtype('int64') In [62]: arr3.ravel() #ravel()方法将数组拉直(多维数组降成一维数组)
Out[62]: array([1, 2, 3, 4, 5, 6, 7, 8, 9]) In [65]: arr3.size #size返回数组的个数
Out[65]: 9 In [66]: arr3.T #数组的转置
Out[66]:
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])

函数

In [20]: arr1=np.array(((1,2,3),(4,5,6),(7,8,9)))
In [21]: arr1
Out[21]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [22]: len(arr1) #查看数组行数
Out[22]: 3 In [21]: arr1
Out[21]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [28]: arr2
Out[28]:
array([[1, 2],
[3, 4],
[5, 6]])
In [30]: arr3 = np.hstack((arr1,arr2)) #hstack横向数组拼接,数组行数必须相同 In [31]: arr3
Out[31]:
array([[1, 2, 3, 1, 2],
[4, 5, 6, 3, 4],
[7, 8, 9, 5, 6]]) In [27]: arr1
Out[27]:
array([[5, 6],
[7, 8]])
In [28]: arr2
Out[28]:
array([[1, 2],
[3, 4],
[5, 6]])
In [34]: arr4=np.vstack((arr1,arr2)) #vstack纵向拼接,必须列数相同 In [35]: arr4
Out[35]:
array([[5, 6],
[7, 8],
[1, 2],
[3, 4],
[5, 6]] In [37]: arr1 = np.arange(21)
In [38]: arr1
Out[38]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20])
In [39]: arr2=arr1.reshape(3,7) #设置数组行数和列数
In [40]: arr2
Out[40]:
array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20]])
In [43]: b = arr2.tolist() #数组转换成列表
In [44]: b
Out[44]:
[[0, 1, 2, 3, 4, 5, 6],
[7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20]]
In [45]: arr2.dtype
Out[45]: dtype('int64')
In [46]: arr3=arr2.astype(float) #转换数据类型
Out[57]: dtype('float64')

数组元素的获取

一维数组元素的获取

In [52]: arr = np.arange(10)
In [53]: arr
Out[53]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [54]: arr[3] #获取第4个元素
Out[54]: 3 In [55]: arr[5:8] #获取第6,7,8三个元素。左闭右开
Out[55]: array([5, 6, 7])

二维数组的获取

In [57]: arr1 = np.array([[1,2],[3,4],[5,6]])
In [58]: arr1
Out[58]:
array([[1, 2],
[3, 4],
[5, 6]])
In [60]: arr1[2] #获取第三行的元素
Out[60]: array([5, 6]) In [61]: arr1[:2] #获取前两行元素
Out[61]:
array([[1, 2],
[3, 4]]) In [62]: arr1[:,1] #获取第二列的元素
Out[62]: array([2, 4, 6]) In [66]: arr1[:,[0,1]] #获取数组第一列和第三列的元素
Out[66]:
array([[1, 2],
[3, 4],
[5, 6]]) In [67]: arr1[0,1] #获取第1行第二列对应的元素
Out[67]: 2

布尔索引

In [1]: import numpy as np
In [2]: names = np.array(['bob','joe','will','bob','will','joe','joe'])
In [3]: names
Out[3]:
array(['bob', 'joe', 'will', 'bob', 'will', 'joe', 'joe'],
dtype='|S4')
In [8]: data = np.arange(28).reshape(7,4)
In [9]: data
Out[9]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27]])
In [14]: names == 'bob'
Out[14]: array([ True, False, False, True, False, False, False], dtype=bool)
In [15]: data[names=='bob'] #返回所有为true的行或为bob的行
Out[15]:
array([[ 0, 1, 2, 3],
[12, 13, 14, 15]]) In [17]: data[names!='bob'] # !=bob的行
Out[17]:
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27]])
In [18]: data[names!='bob',3] #配合切片,选第3列
Out[18]: array([ 7, 11, 19, 23, 27])
In [19]: data[names!='bob'][:2,1:] 也可以这样配合切片
Out[19]:
array([[ 5, 6, 7],
[ 9, 10, 11]])
In [23]: data[(names=='bob')|(names=='joe')] #可以使用&(和)、|(或)之类的布尔算术运算符,注意加小括号
Out[23]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[12, 13, 14, 15],
[20, 21, 22, 23],
[24, 25, 26, 27]]) In [24]: data[data<10]=0 #布尔型数组设置值
In [25]: data
Out[25]:
array([[ 0, 0, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27]])

花式索引

In [32]: arr=np.arange(32).reshape((8,4))
In [33]: arr
Out[33]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
In [34]: arr[[4,3,0,6]] #传入一个数组筛选行
Out[34]:
array([[16, 17, 18, 19],
[12, 13, 14, 15],
[ 0, 1, 2, 3],
[24, 25, 26, 27]])
In [35]: arr[[4,3,0,6],[0,3,1,2]] #传入多个数组返回一个一维数组
Out[35]: array([16, 15, 1, 26]) In [5]: arr=np.arange(32).reshape((8,4))
In [6]: arr
Out[6]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
In [7]: arr[np.ix_([1,5,7,2],[0,3,1,2])]
Out[7]:
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]]

Numpy学习1的更多相关文章

  1. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  2. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  4. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  5. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...

  6. NumPy学习(让数据处理变简单)

    NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...

  7. numpy 学习笔记

    numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...

  8. numpy 学习总结

    numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...

  9. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

随机推荐

  1. 拼团商品列表页 分析 js代码行位置对执行的影响和window.onload的原理 setTimeout传参

    w TypeError : Cannot set property 'innerHTML' of nullTypeError : Cannot set property 'value' of null ...

  2. python - 2 8 16进制/颜色/字符编码

    1.二进制 八进制 十六进制 二进制: bin() 0b10010八进制: oct() 0o10十进制: 1-100十六进制: hex() 0X53 BH 十进制转2, 8,16进制: >> ...

  3. 剑指Offer——构建乘积数组

    题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]. ...

  4. 棋盘格 测量 相机近似精度 (像素精度&物理精度)

    像素精度计算 像素精度——一像素对应多少毫米——距离不同像素精度也不同 将棋盘格与相机CCD平面大致平行摆放,通过[每个点处的近似像素精度=相邻两个角点之间的实际距离(棋盘格尺寸已知)/ 棋盘格上检出 ...

  5. windows中的进程和线程

    今天咱们就聊聊windows中的进程和线程 2016-09-30 在讨论windows下的进程和线程时,我们先回顾下通用操作系统的进程和线程.之所以称之为通用是因为一贯的本科或者其他教材都是这么说的: ...

  6. WCF服务对于处理客户端连接的一点思考

    对于每个客户端的,服务端是否为每个客户端有专门的“通道”? 目的:想在服务端记录下来客户端的访问记录(进入.各个操作.离开等信息),并将其执行的操作独立记录在各个客户端对应的日志中. 下面是代码: 契 ...

  7. centos下apache安装

    ./configure --prefix=/usr/local/apache2 --enable-so --enable-proxy --enable-proxy-connect --enable-p ...

  8. Spark Streaming Checkpoint反序列化问题分析

    转载自:https://mp.weixin.qq.com/s/EQgDUSf3TK0oVg1xmg-49Q Checkpoint是Spark Streaming中的核心机制,它为应用程序的7*24小时 ...

  9. 简明python教程十一----更多Python的内容

    特殊的方法 __init__(self,...):这个方法在新建对象恰好要被返回使用之前被调用 __del__(self):恰好在对象要被删除之前调用 __str__(self):我们对对象使用pri ...

  10. 等待事件对应的p1,p2,p3含义

    Oracle 10g v$session视图中不同等待事件对应的p1,p2,p3的含义也不同,我们不可能记住所有等待事件对应的p1,p2,p3的含义. 可以通过查询V$EVENT_NAME知道每个等待 ...