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. git学习——<四>git版本管理

    一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都 ...

  2. Python并行编程(十一):基于进程的并行

    1.基本概念 多进程主要用multiprocessing和mpi4py这两个模块. multiprocessing是Python标准库中的模块,实现了共享内存机制,可以让运行在不同处理器核心的进程能读 ...

  3. MFC Spin 控件

    一般应用: 设置属性: Auto Buddy(自动取关联控件为TAB顺序前一个)Set Buddy Interger(使控件设置关联控件数值,这个值可以是十进制或十六进制)Wrap(数值超过范围时循环 ...

  4. MySQL索引优化案例浅析

    MySQL是关系型数据库的一种,查询功能强,数据一致性高,数据安全性高,支持二级索引.但是性能比起非关系型数据库稍弱,特别是百万级以上的数据,很容易出现查询慢的现象.这时候要分析慢的原因,一般情况下是 ...

  5. openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide

    http://download.igniterealtime.org/openfire/docs/latest/documentation/db-integration-guide.html Intr ...

  6. SIP UserAgent (B2BUA client)——pjsip

    SIP UserAgent常用的SIP协议栈有pjsip/bell-sip/sofia-sip/libeXosip/libre等 https://github.com/staskobzar/sip_s ...

  7. Spark2.0机器学习系列之11: 聚类(幂迭代聚类, power iteration clustering, PIC)

    在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:             (1)K-means             (2)Latent Dirichlet all ...

  8. python - 常用模块 os, sys

    常用模块: os(处理文件和目录), sys(sys 模块包含了与 Python 解释器和它的环境有关的函数.) sys.argv 变量是一个字符串的 列表.特别地,sys.argv 包含了 命令行参 ...

  9. Multiple encodings set for module chunk explatform "GBK" will be used by compiler

    项目用idea启动的时候,突然报了个这个 Multiple encodings set for module explatform "GBK" will be used by co ...

  10. for…else和while…else

    当while语句配备else子句时,如果while子句内嵌的循环体在整个循环过程中没有执行break语句(循环体中没有break语句,或者循环体中有break语句但是始终未执行),那么循环过程结束后, ...