[python]-数据科学库Numpy学习

一、Numpy简介:

Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。

NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

二、nadrray对象:

1、创建一个数组对象:

  • 函数生成:ones(),zeros(),eye(),diag()......
    • zeros:(4),zeros((5,2))生成全0的数组
    • >>> import numpy as np
      >>> np.zeros(5) //一维
      array([ 0.,  0.,  0.,  0.,  0.])
      >>> np.zeros((5,2))//二维
      array([[ 0., 0.],[ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.]])

       >>> np.zeros((5,2,2))//三维
        array([[[ 0., 0.],
                [ 0., 0.]],

               [[ 0., 0.],
                [ 0., 0.]],

               [[ 0., 0.],
                [ 0., 0.]],

               [[ 0., 0.],
                [ 0., 0.]],

               [[ 0., 0.],
                [ 0., 0.]]])

    • ones():生成全1的数组
    • >>> import numpy as np
      >>> np.ones(10) //一维
      array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
      >>> np.ones(10,dtype="int32")//一维
      array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

        >>> np.ones((4,1)) //二维
        array([[ 1.],
               [ 1.],
               [ 1.],
               [ 1.]])

    • arange函数:类似于list的range函数,通过指定初始值,终值,和步长来生成一维数组。(不包括终值)
    • import numpy as np
      d = np.arange(0,10,1) e = np.arange(0,10,2) print (d) #---------------------------------- [0 1 2 3 4 5 6 7 8 9] [0 2 4 6 8]
    • linspace函数:通过指定初始值,终值和 元素个数来创建一维数组。(默认包含终值,可用endpoint关键字指定包含终值)
    • f = np.linspace(0,10,11,endpoint=False)
      print (f)
      #----------------------------------------
      [ 0.          0.90909091  1.81818182  2.72727273  3.63636364  4.545454555.45454545  6.36363636  7.27272727  8.18181818  9.09090909]
    • logspace函数:类似linspace创建等比数列,下面的例子产生1(10^0)到100(10^2)、有20个元素的等比数列:
    • g = np.logspace(0,2,20)
      print (g)
      [   1.            1.27427499    1.62377674    2.06913808    2.63665093.35981829    4.2813324     5.45559478    6.95192796    8.858667911.28837892   14.38449888   18.32980711   23.35721469   29.7635144237.92690191   48.32930239   61.58482111   78.47599704  100.        ]
    • frombuffer,fromstring,fromfile等函数可以从字节序列创建数组。python自负产是字符序列,每个字符占一个字节,因此如果从字符串s创建一个8bit的整数数组的话得到的每个元书就是字符的ascii码值。
    • s= "abcdefgh"
      sa = np.fromstring(s,dtype = np.int8)
      print (sa)
      #--------------------------------------
      [ 97  98  99 100 101 102 103 104]
    • fromfuction函数:传入一个函数来创建数组
    • def fun(i,j):return (i+1)*(j+1)
      fa = np.fromfunction(fun,(9,9)) #(9,9)表示数组的shape,传给fun的书是每个元素的定位,有81个位置,可以得到81个元素
      print (fa)
      #---------------------------------------------------
      [[  1.   2.   3.   4.   5.   6.   7.   8.   9.][  2.   4.   6.   8.  10.  12.  14.  16.  18.][  3.   6.   9.  12.  15.  18.  21.  24.  27.][  4.   8.  12.  16.  20.  24.  28.  32.  36.][  5.  10.  15.  20.  25.  30.  35.  40.  45.][  6.  12.  18.  24.  30.  36.  42.  48.  54.][  7.  14.  21.  28.  35.  42.  49.  56.  63.][  8.  16.  24.  32.  40.  48.  56.  64.  72.][  9.  18.  27.  36.  45.  54.  63.  72.  81.]]
  • 序列传入:
    • import numpy as np
      a = np.array([1,2,3,4,5])
      b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
      print (a)
      print (b)
      #-------------------------------------------
      [1 2 3 4 5]
      [[ 1  2  3  4][ 4  5  6  7][ 7  8  9 10]]

2、数组的属性:

    • ndim属性:数组的维数
    • >>> np.ones((3,2))
      array([[ 1.,  1.],[ 1.,  1.],[ 1.,  1.]])
      >>> np.ones((3,2)).ndim
      2 #二维
    • size:数组元素的总个数,等于shape属性中元组元素的乘积。
    • >>> np.ones((3,2)).size
      6 #6个元素
    • dtype属性:查看或指定数组类型
    • print(a.dtype) # 数组的元素类型 int32,32bit整型数据
      print(b.dtype) # 数组的元素类型 int32
      aa = np.array([2,3,4,5,6],dtype = np.float)
      print (aa)
      #----------------------------------------------
      [ 2.  3.  4.  5.  6.]
    • shape属性:查看或改变数组的大小
    • print(a.shape) #数组的大小 (5)
      print(b.shape) #数组的大小 shape (3,4)#修改shape来修改数组轴的大小:
      b.shape = (4,3)
      print (b)
      #--------------------------------------
      [[ 1  2  3][ 4  4  5] [ 6 7 7] [ 8 9 10]] #如果某个轴的值为-1,则会根据数组的总数计算此轴的长度。如b一共12个元素,修改shape b.shape = (2,-1) #那么就会得到一个2*6的数组 print (b) #-------------------------------------- [[ 1 2 3 4 4 5] [ 6 7 7 8 9 10]] b.shape = (6,-1) #那么就会得到一个6*2的数组 print (b) #-------------------------------------- [[ 1 2] [ 3 4] [ 4 5] [ 6 7] [ 7 8] [ 9 10]]
    • reshape属性:修改一个数组的尺寸得到一个新数组,原数组不变,但是这两个数组共享内存,如果修改值的话这两个数组都会变。
    • c = a.reshape((5,1)) #此方法实验证明:只能是x*y=数组的总元素才可以,这里1*5只能换成5*1
      print (c) #此时a的结构并没改变,a,c共享内存。
      print (a)
      #--------------------------------------
      [[1][2][3][4][5]]
      [1 2 3 4 5]
      #修改a[1][2]的值
      a[2] = 100
      print (c) #此时a的结构并没改变,a,c共享内存。
      print (a)
      #--------------------------------------
      [1 2 3 4 5]
      [[  1][  2][100][  4][  5]]
      [  1   2 100   4   5]

3、数组存取:

  • 切片法[[[----***逗号“,”分行,列。冒号“:”分范围***---]]]
  • >>> import numpy as np
    >>> np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
    array([[ 1,  2,  3,  4],[ 4,  5,  6,  7],[ 7,  8,  9, 10]])
    >>> b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) >>> b[0] array([1, 2, 3, 4]) >>> b[1] array([4, 5, 6, 7]) >>> b[1,2] 6 >>> b[1,3] 7 >>> b[1,-1] 7 >>> b[-1] array([ 7, 8, 9, 10]) >>> b[-1,2] 9 >>> b[-1,-2] 9
    >>> b[:-2] #0--负2列 array([[1, 2, 3, 4]]) >>> b[1:2] array([[4, 5, 6, 7]]) >>> b[1:3] array([[ 4, 5, 6, 7], [ 7, 8, 9, 10]])
    #*************矩阵的截取***********************

      >>> a=np.mat(np.random.randint(2,15,size=(3,3)))
      >>> a
      matrix([[ 4, 10, 14],
              [11, 3, 12],
              [ 4, 2, 12]])
      >>> a[1:,1:,]
      matrix([[ 3, 12],
              [ 2, 12]])

三、矩阵对象matrix:

numpy库提供了matrix类,使用matrix类创建的是矩阵对象,它们的加减乘除运算缺省采用矩阵方式计算。但是由于NumPy中同时存在ndarray和matrix对象,因此很容易将两者弄混。

  • 创建矩阵:matrix函数(也可以用简写mat) a = np.matrix([[1,2,3],[5,5,6],[7,9,9]]) 
  • #利用ones()创建一个2*4的全1矩阵
    >>> np.mat(np.ones((2,4))) 
    matrix([[ 1.,  1.,  1.,  1.],[ 1.,  1.,  1.,  1.]])
  • #用numpy的随机数rand产生一个2*2的随机数组并转化成矩阵
    >>> np.mat(np.random.rand(2,2)) 
    matrix([[ 0.4340437 ,  0.98055453],[ 0.52937992,  0.81452857]])
    #产生一个2-8之间的整数数组大小是2*5,再转换成矩阵。
    >>> np.mat(np.random.randint(2,8,size=(2,5)))
    matrix([[3, 6, 4, 4, 5],[3, 7, 7, 2, 3]])
    #eye()函数产生单位对角数组,转换成单位对角阵
    >>> np.mat(np.eye(2,2,dtype=int))
    matrix([[1, 0],[0, 1]])
    >>> np.mat(np.eye(3,2,dtype=int))
    matrix([[1, 0],[0, 1], [0, 0]]) >>> np.mat(np.eye(3,3,dtype=int)) matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    #将一维数组转换成对角阵
    >>> np.mat(np.diag([1,2,3]))
    matrix([[1, 0, 0],[0, 2, 0],[0, 0, 3]])
    >>>
  • 矩阵运算:乘积,求逆,幂运算,转置
    >>> import numpy as np
    >>> a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])
    >>> a
    matrix([[1, 2, 3],[5, 5, 6],[7, 9, 9]]) >>> a**-1 #求逆 a.I也是a的逆 matrix([[-0.6 , 0.6 , -0.2 ], [-0.2 , -0.8 , 0.6 ], [ 0.66666667, 0.33333333, -0.33333333]]) >>> a*a**-1 #a乘a的逆,矩阵内积 matrix([[ 1.00000000e+00, 1.66533454e-16, -1.11022302e-16], [ 0.00000000e+00, 1.00000000e+00, -4.44089210e-16], [ 4.44089210e-16, 5.55111512e-17, 1.00000000e+00]])
    >>> a.T #a的转置 matrix([[1, 5, 7], [2, 5, 9], [3, 6, 9]]) >>>
  • 矩阵函数:
    • dot():做矩阵乘法,一维数组做点积,二维数组做内积,不过乘积必须满足矩阵相乘的形式(M(x,y)*M2(y,z)),两个矩阵的行列必须对应,都是一维的话必须是一个行向量,一个列向量,可以用m.reshape(-1,1)将行向量转为列向量,或者m.reshape(1,-1)将列向量转为行向量。
    • inner():
    • outer():
  • 矩阵中更高级的一些运算可以在NumPy的线性代数子库linalg中找到。例如inv函数计算逆矩阵,solve函数可以求解多元一次方程组。
  • >>> from numpy import linalg as ll
    >>> ll.inv(a) #求逆
    matrix([[-0.6       ,  0.6       , -0.2       ],[-0.2       , -0.8       ,  0.6       ],[ 0.66666667,  0.33333333, -0.33333333]])
    >>> a
    matrix([[1, 2, 3], [5, 5, 6], [7, 9, 9]])
参考:http://blog.csdn.net/sunny2038/article/details/9002531
参考:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html#id8

转载于:https://www.cnblogs.com/NextNight/p/6929937.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

检测一个点, 是否在一个半圆之内的方法

demo: http://jsbin.com/lihiwigaso 需求: 一个圆分成分部分, 鼠标滑上不同的区域显示不同的颜色 思路: 先判断这个点是否在圆之内, 再判断是否在所在的三角形之内就可以了 所需要的全部源码: <!DOCTYPE html> <html> <head><meta charset"utf-8&quo…

计算机网络设备接地规范,网络机房防雷接地的四种方式及静电要求

编辑----河南新时代防雷由于计算机网络系统的核心设备都放置在网络机房内&#xff0c;因而网络机房防雷接地有了较高的环境要求&#xff0c;良好的接地系统是保证机房计算机及网络设备安全运行&#xff0c;以及工作人员人身安全的重要措施。直流地的接法通常采用网格地&#xf…

抓住尾部的StackOverFlowError

使用Java程序时可能要处理的一种更烦人的情况是StackOverFlowError&#xff0c;如果您有一个很好的可生产的测试用例&#xff0c;那么关于使用堆栈大小或设置条件断点/某种痕迹 。 但是&#xff0c;如果您有一个测试案例可能一次失败100次&#xff0c;或者像我的案例一样在AWTM…

Gunicorn配置部分的翻译

写在前面&#xff0c;虽然翻译得很烂&#xff0c;但也是我的劳动成果&#xff0c;转载请注明出处&#xff0c;谢谢。 Gunicorn版本号19.7.1 Gunicorn配置 概述 三种配置方式 优先级如下&#xff0c;越后的优先级越大 1.框架的设置&#xff08;现在只有paster在用这个&#xff0…

台式计算机风扇声音大怎么处理,如何解决电脑电源风扇声音大的问题?

现在的台式机一般用3到5年后&#xff0c;一些问题自然也就慢慢表现出来了。很多网友在使用电脑过程中都有电脑风扇声音大怎么办的问题&#xff0c;电脑风扇声音大就会让人觉得使用电脑很不舒服&#xff0c;怎么办好呢&#xff1f;出现重要的问题要如何解决好呢&#xff1f;现在…

jsp分页功能

http://blog.csdn.net/xiazdong/article/details/6857515转载于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有数据库的简单登录应用程序

什么是Spring Security&#xff1f; Spring Security是一个提供安全解决方案的框架&#xff0c;可在Web请求级别和方法级别上处理身份验证和授权。 Spring安全性通过两种方式处理安全性。 一种是安全的Web请求&#xff0c;另一种是在URL级别限制访问。 Spring Security使用Serv…

计算机应用 winxp,2017年职称计算机考试模块WindowsXP试题

2017年职称计算机考试模块WindowsXP试题全国专业技术人员计算机应用能力考试是专业技术人员资格考试的一种。接下来应届毕业生小编为大家搜索整理了2017年职称计算机考试模块WindowsXP试题&#xff0c;希望大家有所帮助。1. Windows XP中删除某个文件的快捷方式【 A 】。A. 对原…

Python基础(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重复   2 下次重复一定是基于上一次的结果而来 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代举例2、可迭代对象 可进行.__iter__()操作的为可迭代对象 #print(isinstance(str1,Iterable)),判断str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域请求数居&#xff0c;报错 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 参考&#xff1a;stackoverflow 未解决。。。脑仁疼。。。有小伙伴也碰到过这个问题么&#xff1f; 16/11/30 问题解决 1.服务器端API允许跨域访问(返回的数据添加允…

图片无法删除要计算机管理员,存在桌面的图片删不掉,怎么处理?提示是需要管理员权限。...

将下面代码复制到记事本里&#xff0c;重命名为1.bat&#xff0c;然后打开&#xff0c;这时你右键图片会出现管理员取得所有权&#xff0c;然后取得所有权后再删除试试Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]管理员取得所有权NoWorkingDirecto…

Java对象序列化的本机C / C ++类似性能

您是否曾经希望过像使用C 这样的本地语言将Java对象转换成字节流一样快的速度&#xff1f; 如果您使用标准的Java序列化&#xff0c;您可能会对性能感到失望。 Java序列化的目的是与尽可能快而紧凑地序列化对象的目的截然不同。 为什么我们需要快速紧凑的序列化&#xff1f; 我…

WebStrom Sass 编译配置 windows

第一步&#xff1a; 先安装Ruby下载 一路next 安装完成后打开开始菜单 打开后输入 gem install sass sass -v 出现版本号说明成功 第二部配置webstorm 在webstorm中settings中搜索file watchers工具&#xff0c;在此工具中添加一个scss的watcher 确定&#xff0c;打开一个scss…

非本地跳转之setjmp与longjmp

非本地跳转(unlocal jump)是与本地跳转相对应的一个概念。 本地跳转主要指的是类似于goto语句的一系列应用&#xff0c;当设置了标志之后&#xff0c;可以跳到所在函数内部的标号上。然而&#xff0c;本地跳转不能将控制权转移到所在程序的任意地点&#xff0c;不能跨越函数&am…

清华计算机自主招生试题,2017年清华大学自主招生笔试题

2017年清华大学自主招生笔试题2017高考结束后&#xff0c;全国各大高校自主招生面试开始了&#xff0c;以下是百分网小编搜索整理的关于2017年清华大学自主招生笔试题&#xff0c;供各位参考&#xff0c;希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!…

扩展剂:模式还是反模式?

扩展器模式在最近几年变得很流行&#xff0c;甚至已经在OSGi标准&#xff08;例如&#xff0c;蓝图服务和Web应用程序规范&#xff09;中使用。 在处女座&#xff0c;我们从一开始就与扩展程序一起工作&#xff0c;但是尽管它们具有优势&#xff0c;但它们仍有一些明显的缺点。…

python html格式编码

web应用如用到ace等网络编辑器的时候&#xff0c;如要支持html,xml等格式的文件编辑&#xff0c;输入ace 的文本内容必须先进行html格式编码&#xff1a; def html_escape(content): import cgi return cgi.escape(content)转载于:https://www.cnblogs.com/zhouxiaoming/p/703…

字符串替换

题目: 给定一个英文的字符串, 要求你将其中的元音删除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 当看到这个题目的时候, 第一个想起的就是re模块的正则表达式. 不过由于最近使用过字符串的replace方…

小学计算机技术指导纲要,《中小学信息技术课程指导纲要(试行)》

《中小学信息技术课程指导纲要(试行)》2000年11月教育部颁发的《中小学信息技术课程指导纲要(试行)》教学目标&#xff1a;1、 增强信息意识&#xff0c;了解信息技术的发展变化及其对工作和社会的影响。2、 初步了解计算机基本工作原理&#xff0c;学会使用与学习和实际生活直…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不错的布局窗格&#xff0c;如果您想一个接一个地连续地水平或垂直地布局子级&#xff0c;则可以。 它们彼此非常相似&#xff0c;因为它们都将子级布置成列&#xff08;在水平Flow / TilePane的情况下&#xff09;并按其宽度或行&#xff08;在垂直Flow…