zoukankan      html  css  js  c++  java
  • Numpy库的学习(五)

    今天继续学习一下Numpy库,废话不多说,整起走

    先说下Numpy中,经常会犯错的地方,就是数据的复制

    这个问题不仅仅是在numpy中有,其他地方也同样会出现

    import numpy as np
    a = np.arange(12)
    b = a
    print(b is a)
    b.shape = 3,4
    print(a.shape)
    print(id(a))
    print(id(b))

    先看看这段代码,我们随便建立了一个numpy数组

    然后我想把a这个值,赋值给b,很简单的操作,b = a 

    那么我们打印一下b和a是不相等,返回的结果为True

    也就是说,b和a是相等的

    那么我们现在讲b做个shape变换

    然后在看看a的shape有没有变换

    我们这里多打印些东西,更容易我们理解

    我们看到a 的id,和b 的id 是一样的,说明a和b,是完全相等的

    我改变其中任意一个,都是改变另外一个值。实际上a和b指向的都是内存中的同一个地址

    我们接着看下面的代码

    c = a.view()
    print(c is a)
    c.shape = 2,6
    print(a.shape)
    c[0,4] = 1234
    print(a)
    print(id(a))
    print(id(c))

    我这里 定义了一个c,这个c也是一种复制,浅复制。用view()

    我们在看看c 是不是a,返回的结果则是,False,说明,a和c不相等

    我们将c.shape变换为2,6

    打印一下a.shape发现,a的shape还是3,4

    那么我将c中的一个值,修改为1234

    可以看到,打印出来的a也改变了

    让后通过id发现, 他们两个不是同一个地址。但是我修改的时候会做修改

    说明,用view()方法复制出来的数据,相当于python中的浅拷贝。

    简单说,就是a和c他们指向的地址不一样,但是他们公用一组数据。

    但是这个view不推荐使用

    下面我们接着看

    d = a.copy()
    print(d is a) 
    d[0,0] = 9999
    print(d)
    print(a)

    这里看到,d = a.copy(),a 不是d ,所以打印出来是False

    那么我们让d 中的 一个元素变成9999

    那么打印一下a和d 发现,a中没有变化,d中有变化,也就是说

    如果我们想让一个变量,的初始值是a,然后在新的上面做一些变化的时候,一定要用copy来做

    下面我们在说说argmax

    data = np.sin(np.arange(20).reshape(5,4))
    print(data)
    ind = data.argmax(axis=0)
    print(ind)
    data_max = data[ind, range(data.shape[1])]
    print(data_max)

    这段代码可以看出,我们生成了一个5行 4列的矩阵。我们定义维度axis = 0 就是按照列进行选择

    打印一下可以看到,第一列中0.98935825这个值是最大的。我们通过打印ind,得到最大的值是矩阵第一列的第3个元素

    也就是元素下标为2,那么第二列中,第一个元素最大,下标为0,以此类推,得到[2 0 3 1]

    按行找的话,需要设置维度axis = 1,即可

    我们想取到,没列中,最大的数是多少,可以使用data_max这种取值方式,将矩阵中按照列排列最大的元素是多少,取出来

    a = np.arange(0,40,10)
    print(a)
    b = np.tile(a,(4,2))
    print(b)=

    看到上面这段代码,我们生成一个向量

    然后,通过tile函数,将我们生成的向量传入进去,让后按照矩阵进行翻倍变换

    得到,4行2列的数据,下面继续

    a = np.array([[4,3,5],[1,2,1]])
    print(a)
    b = np.sort(a, axis = 1)
    print(b)
    a.sort(axis = 1)
    print('****************')
    print(a)
    a = np.array([4,3,1,2])
    j = np.argsort(a)
    print('***************')
    print(j)
    print('***************')
    print(a[j])

    首先我们使用sort,将我们的a进行了以行为主的排序

    我们可以看到,使用np.sort和直接.sort的效果是一样的

    np.argsort,则是求出a的索引值,然后再按照a的索引值进行排序

    今天就先说到这里,感谢各位的阅读,感谢支持!!谢谢!!

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/ws17345067708/p/10714169.html
Copyright © 2011-2022 走看看