一、创建数组

1、创建数组的函数

  • array:将输入数据(列表、元组、数组或其他序列类型)转换为ndarray,可用dtype指定数据类型。
  1. >>> import numpy as np
  2. >>> a=np.array([1,2,3])
  3. >>> a
  4. array([1, 2, 3])
  5. >>> c=np.array([1,2,3],dtype=float) #使用的type指定数据类型
    >>> c
    array([ 1.,  2.,  3.])
    >>> c=c.astype(int) #使用astype更改数据类型
    >>> c
    array([1, 2, 3])
  • arange:类似于range,但返回的不是列表而是ndarray。
  1. >>> g=np.arange(5)
  2. >>> g
  3. array([0, 1, 2, 3, 4])
  4. >>> k=np.arange(6).reshape(2,3)
  5. >>> k
  6. array([[0, 1, 2],
  7. [3, 4, 5]])
  • ones、ones_like:创建全是1的数组。
  1. >>> c=np.ones((2,3),dtype=np.int)
  2. >>> c
  3. array([[1, 1, 1],
  4. [1, 1, 1]])
  5.  
  6. >>> d=np.ones_like(c) #d的形状和dtype与c相同
  7. >>> d
  8. array([[1, 1, 1],
  9. [1, 1, 1]])
  • zeros、zeros_like:创建全是0的数组。
  1. >>> f=np.zeros((2,3,2))
  2. >>> f
  3. array([[[ 0., 0.],
  4. [ 0., 0.],
  5. [ 0., 0.]],
  6.  
  7. [[ 0., 0.],
  8. [ 0., 0.],
  9. [ 0., 0.]]])
  10.  
  11. >>> g=np.zeros_like(f) #g的形状和dtype与f相同
  12. >>> g
  13. array([[[ 0., 0.],
  14. [ 0., 0.],
  15. [ 0., 0.]],
  16.  
  17. [[ 0., 0.],
  18. [ 0., 0.],
  19. [ 0., 0.]]])
  • empty,empty_like:创建新数组,只分配内存但不填充任何值。

注:empty数据并不是空的数组,也不是全为0的数组,它返回的是一些未初始化的垃圾值。

  1. >>> k=np.empty((2,3))
    >>> k
    array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
           [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])

  2. >>> g=np.empty_like(k) #g的形状和dtype与k相同
    >>> g
    array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
           [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])
  • eye、identity:创建一个正方的N*N的单位矩阵(对角线为1,其他为0)

np.eye(N, M=None, k=0, dtype=<type ‘float’>)
可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。

  1. >>> l=np.eye(3,4,1) #3行4列,为1的对角线向上移一位
  2. >>> l
  3. array([[ 0., 1., 0., 0.],
  4. [ 0., 0., 1., 0.],
  5. [ 0., 0., 0., 1.]])
  6.  
  7. >>> l1=np.eye(3,3,-1) #3行3列,为1的对角线向下移一位
  8. >>> l1
  9. array([[ 0., 0., 0.],
  10. [ 1., 0., 0.],
  11. [ 0., 1., 0.]])
  12.  
  13. >>> j=np.identity(3) #创建方形单位矩阵(对角线为1,其余为0)
  14. >>> j
  15. array([[ 1., 0., 0.],
  16. [ 0., 1., 0.],
  17. [ 0., 0., 1.]])

 

2、Numpy的数据类型

3、 查看数组维度、数组形状、数据类型

  1. >>> a=np.random.randn(4,3)
  2. >>> a
  3. array([[-1.67075275, -0.53713536, -1.54479383],
  4. [-0.95460603, 2.097174 , -0.61332423],
  5. [-1.92818377, -0.00663392, 1.34561876],
  6. [ 0.54646619, -0.85965155, -0.70237827]])
  7.  
  8. >>> a.ndim #查看维度
  9. 2
  10.  
  11. >>> a.shape #查看形状
  12. (4, 3)
  13.  
  14. >>> a.dtype #查看数据类型
  15. dtype('float64')

二、索引、切片

  • 利用行列号索引、切片
  1. >>> a
  2. array([[0, 1, 2],
  3. [3, 4, 5]])
  4.  
  5. >>> a[0]
  6. array([0, 1, 2])
  7.  
  8. >>> a[0][2]
  9. 2
  10.  
  11. >>> a[0][1:]
  12. array([1, 2])
  13.  
  14. >>> a[:,:1]
  15. array([[0],
  16. [3]])
  17.  
  18. >>> a[:,:2]
  19. array([[0, 1],
  20. [3, 4]])
  • 利用整数数组做花式索引
  1. >>> a=np.arange(20).reshape(5,4)
  2. >>> a
  3. array([[ 0, 1, 2, 3],
  4. [ 4, 5, 6, 7],
  5. [ 8, 9, 10, 11],
  6. [12, 13, 14, 15],
  7. [16, 17, 18, 19]])
  8.  
  9. >>> a[[0,2,4]] #选取第0,2,4行元素
  10. array([[ 0, 1, 2, 3],
  11. [ 8, 9, 10, 11],
  12. [16, 17, 18, 19]])
  13.  
  14. >>> a[[0,2,1],[1]] #意为选取(0,1),(2,1),(1,1)的元素
  15. array([1, 9, 5])
  16.  
  17. >>> a[[0,2,1]][:,[2,0]]#意为选取021行,2,0列的元素
  18. array([[ 2, 0],
  19. [10, 8],
  20. [ 6, 4]])
  • 条件索引
  1. >>> a=np.random.randn(4,3)
  2. >>> a
  3. array([[-0.04603611, -1.04144497, 0.78488753],
  4. [-0.06099172, 0.31987999, 0.62553966],
  5. [-0.44534405, -0.33631437, 0.07821993],
  6. [-0.56541056, -0.42975815, -0.65669226]])
  7.  
  8. >>> a[a<0]
  9. array([-0.04603611, -1.04144497, -0.06099172, -0.44534405, -0.33631437,
  10. -0.56541056, -0.42975815, -0.65669226])
  11.  
  12. >>> b=np.array(['rose','lily','tulips','hyacinth'])
  13. >>> b==‘lily #条件判断,返回布尔数组
  14. array([False, True, False, False], dtype=bool)
  15.  
  16. >>> a[b==‘lily’] #用布尔数组判断,返回布尔为true的行,注行数要与布尔数组的长度相同
  17. array([[-0.06099172, 0.31987999, 0.62553966]])
  18.  
  19. >>> c=(b=='rose')|(b=='lily') #条件或写法,不能写成or
  20. >>> c #多个条件判断
  21. array([ True, True, False, False], dtype=bool)
  22. >>> a[c]
  23. array([[-0.04603611, -1.04144497, 0.78488753],
  24. [-0.06099172, 0.31987999, 0.62553966]])

>>> b!='rose'    #条件非写法
  array([False,  True,  True,  True], dtype=bool)

>>> f=(b=='rose')&(b=='lily')  #条件与写法,不能写成and
  >>> f
  array([False, False, False, False], dtype=bool)
 

 三、数组和标量间的运算

大小相等的数组间的算术运算会应用到元素级。

  1. >>> a=np.arange(6).reshape(2,3)
  2. >>> a
  3. array([[0, 1, 2],
  4. [3, 4, 5]])
  5.  
  6. >>> a*a
  7. array([[ 0, 1, 4],
  8. [ 9, 16, 25]])
  9.  
  10. >>> a+a
  11. array([[ 0, 2, 4],
  12. [ 6, 8, 10]])
  13. >>> a-a
  14. array([[0, 0, 0],
  15. [0, 0, 0]])
  16.  
  17. >>> a/a
  18. array([[ nan, 1., 1.],
  19. [ 1., 1., 1.]])
  20.  
  21. >>> a*2
  22. array([[ 0, 2, 4],
  23. [ 6, 8, 10]])
  24.  
  25. >>> a/2
  26. array([[ 0. , 0.5, 1. ],
  27. [ 1.5, 2. , 2.5]])
  28.  
  29. >>> a**0.5
  30. array([[ 0. , 1. , 1.41421356],
  31. [ 1.73205081, 2. , 2.23606798]])

 四、数组转置和轴对换

  • T:转置
  1. >>> a=np.arange(6).reshape(3,2)
  2. >>> a
  3. array([[0, 1],
  4. [2, 3],
  5. [4, 5]])
  6.  
  7. >>> a.T #转置
  8. array([[0, 2, 4],
  9. [1, 3, 5]])
  • transpose:传入一个由轴编号组成的元组,对这些轴进行转置
  1. >>> arr=np.arange(16).reshape(2,2,4)
  2. >>> arr
  3. array([[[ 0, 1, 2, 3],
  4. [ 4, 5, 6, 7]],
  5.  
  6. [[ 8, 9, 10, 11],
  7. [12, 13, 14, 15]]])
  8.  
  9. >>> arr.transpose(0,2,1) #transpose(行、列、层)分别用数字0,1,2代表,arr.transpose(0,2,1)意为列、层对换
  10. array([[[ 0, 4],
  11. [ 1, 5],
  12. [ 2, 6],
  13. [ 3, 7]],
  14.  
  15. [[ 8, 12],
  16. [ 9, 13],
  17. [10, 14],
  18. [11, 15]]])
  • swapaxes:接受一对轴编号
  1. >>> arr.swapaxes(1,2) #接受一对轴编号,列、层对调
  2. array([[[ 0, 4],
  3. [ 1, 5],
  4. [ 2, 6],
  5. [ 3, 7]],
  6.  
  7. [[ 8, 12],
  8. [ 9, 13],
  9. [10, 14],
  10. [11, 15]]])

 五、函数

  • abs,fabs   :计算整数、浮点数、复数的绝对值,对于非复数,fabs更快
  1. >>> a=np.random.randn(3,4)
  2. >>> a
  3. array([[ 1.38259684, 1.5849254 , 0.4449462 , 0.2385593 ],
  4. [ 1.00091383, -1.09375872, -0.02773304, 0.53630798],
  5. [ 0.57737587, 1.60649999, -0.20384362, -1.22109508]])
  6. >>> np.abs(a)
  7. array([[ 1.38259684, 1.5849254 , 0.4449462 , 0.2385593 ],
  8. [ 1.00091383, 1.09375872, 0.02773304, 0.53630798],
  9. [ 0.57737587, 1.60649999, 0.20384362, 1.22109508]])
  10. >>> np.fabs(a)
  11. array([[ 1.38259684, 1.5849254 , 0.4449462 , 0.2385593 ],
  12. [ 1.00091383, 1.09375872, 0.02773304, 0.53630798],
  13. [ 0.57737587, 1.60649999, 0.20384362, 1.22109508]])
  • sqrt:计算平方根
  1. >>> b=np.arange(4).reshape(2,2)
  2. >>> b
  3. array([[0, 1],
  4. [2, 3]])
  5.  
  6. >>> np.sqrt(b)
  7. array([[ 0. , 1. ],
  8. [ 1.41421356, 1.73205081]])
  • square:计算平方
  1. >>> b
  2. array([[0, 1],
  3. [2, 3]])
  4. >>> np.square(b)
  5. array([[0, 1],
  6. [4, 9]], dtype=int32)
  • exp计算指数

    《利用python进行数据分析》——Numpy基础的更多相关文章

    1. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

      概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

    2. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

      http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

    3. 利用Python进行数据分析——Numpy基础:数组和矢量计算

      利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

    4. numpy 基础操作

      Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...

    5. Numpy 基础

      Numpy 基础 参考https://www.jianshu.com/p/83c8ef18a1e8 import numpy as np 简单创建数组 # 创建简单列表 a = [1, 2, 3, 4 ...

    6. [转]python与numpy基础

      来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...

    7. python学习笔记(三):numpy基础

      Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...

    8. Numpy基础数据结构 python

      Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数据 1.一维数组 import numpy as np ar = np.a ...

    9. Python Numpy基础教程

      Python Numpy基础教程 本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy = Numerical + Pyth ...

    10. NumPy基础操作

      NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

    随机推荐

    1. P1065 汪老师的烟

      题目描述 汪老师有n根烟,他每吸完一根烟就把烟蒂保存起来,\(k(k>1)\) 个烟蒂可以换一个新的烟,那么 汪老师 最终能吸到多少根烟呢? 输入格式 每组测试数据一行包括两个整数 \(n,k( ...

    2. P1018 灵灵排数字

      题目描述 今天灵灵收到了n张卡片,他需要给他们从小到大排序. 输入格式 输入的第一行包含一个整数 \(n(1 \le n \le 10^5)\) . 输入的第二行包含 \(n\) 个正整数,以空格间隔 ...

    3. jquery 选择多级父子元素

      <div class="box"> <div class="item"> <div class="out"&g ...

    4. 螺旋矩阵O(1)根据坐标求值

      传送门 洛谷2239 •题意 从矩阵的左上角(第11行第11列)出发,初始时向右移动: 如果前方是未曾经过的格子,则继续前进,否则右转: 重复上述操作直至经过矩阵中所有格子. 根据经过顺序,在格子中依 ...

    5. The Struts dispatcher cannot be found异常的解决方法

      系统错误:HTTP Status 500 异常信息:The Struts dispatcher cannot be found.  This is usually caused by using St ...

    6. 数据库基础之Mysql

      数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...

    7. 009 Ceph RBD增量备份与恢复

      一.RBD的导入导出介绍 Ceph存储可以利用快照做数据恢复,但是快照依赖于底层的存储系统没有被破坏 可以利用rbd的导入导出功能将快照导出备份 RBD导出功能可以基于快照实现增量导出 二.RBD导出 ...

    8. tomcat日志传参乱码问题

      问题:      在centos系统下,tomcat8.0.36控制台日志打印会出现中文乱码. 解决方案:      在catalina.sh里加上 JAVA_OPTS="-Dfile.en ...

    9. ES6学习之二

      本文的学习来自技术胖大神的教程:https://jspang.com/ 1扩展运算符和rest运算符 扩展运算符和rest运算符,它们都是…(三个点). 它们有很多相似之处,甚至很多时候不用特意去区分 ...

    10. 洛谷$P5330\ [SNOI2019]$数论 数论

      正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...