zoukankan      html  css  js  c++  java
  • numpy简单入门

    numpy数以数组为对象,将各种数据转化成数组,因此,我们学习的也就是数组了,实际上它被称之为 ndarrays。

    创建一个数组:

    import numpy as np
    
    my_array = np.array([1, 2, 3, 4, 5])
    print(my_array)
    print(my_array.shape)

    创建全部为0 的数组:

    import numpy as np
    
    my_zeros_array = np.zeros(5)
    print(my_zeros_array)

    创建数组:

    import numpy as np
    # 用列表生成数组
    a = np.array([0, 1, 2, 3, 4])
    # 用元组生成数组
    b = np.array((0, 1, 2, 3, 4, 5))
    # 产生0到4的整数数组,包头不包尾
    c = np.arange(5)
    # 从0到100,以10作为差值求等差数列
    e = np.arange(0, 100, 10) 
    # 产生0到2*np.pi的等差数列,并且一共五个,可以得出差值为2*np.pi/(5-1) = 1.5707963267948966 
    d = np.linspace(0, 2*np.pi, 5) print(a) print(b) print(c) print(d)

    多维数组:

    import numpy as np
    
    
    # MD Array,
    a = np.array([[11, 12, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28 ,29, 30],
                  [31, 32, 33, 34, 35]])
    
    # 以0作为数组的下标
    print(a[0, 0])
    # 可以使用负数倒数去取值
    print(a[-1, -1])
    # 数组切片是包头不包尾
    print(a[2, 1:4])
    # 对比一下这个跟原生的python规则一致
    d = [1, 2, 3, 4, 5]
    print(d[1:4])

    数组的属性:

    import numpy as np
    
    
    # Array properties,
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 35]])
    
    # <class 'numpy.ndarray'>
    print(type(a))
    
    # object 这个不准确,有时候是int32 有时候是int64 还有的是其他float,string等这个是根据这个数组的值决定
    print(a.dtype)  # int32
    # 1、如果里面的额数值都是int并且值不大于-2^31 ~ 2^31-1次方=4294967295,由于则显示为int32
    # 来感受一下吧
    # int32
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 2147483647]])
    print(a.dtype)
    # int64
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 2147483648]])
    print(a.dtype)
    # 那么,64的极限在哪里?你可能想到了,就是-2^63 ~ 2^63-1
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 2**63-1]])
    print(a.dtype)
    # 比int还要大一点呢?那就是float64了
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 2**63]])
    print(a.dtype)
    # 比float大一点点呢?那就是object了
    a = np.array([[11, 23, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 2**64]])
    print(a.dtype)

    在这里我要强行解释一波,哪里不对的地方请各位道友多多指出

    1、为什么int32是用2^32次方的算数呢?因为计算机中都是由0或1组成的数据,也就是两种情况(2就被推出来送命啦),而32是表示32位的意思,那“位”又是什么?位是计算机的最小存储单元(也就是存放0或1 的那个单元,你可以理解成牢房),8位为一个字节,因此int32又称4个字节。字节是计算机中的最小单位。

      那为什么是-2^31~2^31-1这个范围呢?而不是0~2^32-1这个范围呢?你的理解非常正确,无符号整型就是这个范围,那就好理解了,因为有正负号,所以就是-2^31~2^31-1。

      还有,为什么是-2^31~2^31-1而不是-2^31~2^31呢?都说对半分嘛,怎么正数反而要减去一个1呢?没错,你的怀疑不无道理,可以这样就有一个棘手的问题,1可以表示位00000000 00000000 0000000 00000001 ,而-1可以表示为 10000000 00000000 00000000 00000001,那么0呢?当然,0有两种情况-0和0,你可能很疑惑,怎么有-0呢?没办法还真的有。因此-0和0占去一位都是0,所以就需要负数或者正数减去一个1。int64也一样。

    2、我也有个疑问,为什么float取值范围要比int64还要大?因为他们都是64位存储对吧?而且float类型还要用一位来记录小数点,没错吧!

      我也是想当然,不过如果我们学过C或者更加底层的汇编,你就会发现,浮点的存储跟整型不一样,他是可能损失精度的,比如1000000 整型就傻傻的将所有1000000转化为二进制存放,而浮点类型不一样,会转化成1.e7,也就是将一部分保留,另一部分以幂次方表示,从而扩大其取值范围。

    3、没想好,就先这样吧~!

    Where 函数

    where() 函数是另外一个根据条件返回数组中的值的有效方法。只需要把条件传递给它,它就会返回一个使得条件为真的元素的列表。

    import numpy as np
    
    a = np.arange(0, 100, 1)
    print(a)
    b = a[:5]
    c = a[a >= 50]
    print(b) # >>>[ 0 10 20 30 40]
    print(c) # >>>[50 60 70 80 90]
    
    
  • 相关阅读:
    【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
    【转】IOS 怎么获取外设的广播数据AdvData
    【转】在Xcode中使用Git进行源码版本控制 -- 不错
    【转】自定义垂直的UISlider
    目标识别(object detection)中的 IoU(Intersection over Union)
    目标识别(object detection)中的 IoU(Intersection over Union)
    【几何/数学】概念的理解 —— (非)刚体变换((non-)rigid transformation)
    【几何/数学】概念的理解 —— (非)刚体变换((non-)rigid transformation)
    中英文对照 —— 哲学
    中英文对照 —— 哲学
  • 原文地址:https://www.cnblogs.com/hardykay/p/11287040.html
Copyright © 2011-2022 走看看