美文网首页我爱编程
2018-03-18-数学不好的Scipy入门(一)

2018-03-18-数学不好的Scipy入门(一)

作者: 0xC00005 | 来源:发表于2018-03-19 07:21 被阅读0次

    前言

    科学计算是什么,能吃吗?
    最近迷上数据收集,然而我数学不过关连线性代数集并查都不知道是什么东西【嘻嘻嘻】
    越写越蒙,所以打算从头学一遍Scipy软件生态圈下面的科学计算三巨头:

    用来写多维数组

    用来制作表格

    用来绘图和生成表格

    小白错误警告!小白错误警告!

    本人并没有写过Numpy,所以我跟你们一样也是从零开始学
    如果有dalao发现我什么地方写的不对,或者发生小白错误误人子弟的话,赶紧发邮件骂人,我我我马上修改【发抖】
    email:0xc00005.gmail.com

    Numpy的简单入门

    0x01 安装

    虽然我已经入手了Anaconda,自带Numpy,但是为了安全起见我还是再次检查了一下安装包,然后import

    pip install numpy
    

    因为numpy这个单词实在是太鸡儿长了,所以一般我们会把他简写成np

    import numpy as np 
    

    PS:注意导入的时候的大小写

    以后用到Numpy的话直接就用np.函数名就ok了

    0x02 多维数组

    其实入手Numpy主要还是为了多维数组这个数据结构【其他的数据结构不会用】
    NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。

    #生成一个一维数组
    import numpy as np 
    a = np.array([1,2,3])  
    print a
    [1,2,3]
    
    #生成一个多维数组  
    a = np.array([[1,  2],  [3,  4]])  
    print a
    
    [[1, 2] 
     [3, 4]]
    

    记住是在列表里面写列表,像C++那样的Narray[10][10][10]

    ndarray.ndmin

    这个方法返回当前多维数组的维度,什么意思呢
    比如a[10]这就叫一维数组
    a[10][10]在a的第十行第十列就是二维数组了
    以此类推.....
    或者更简单一点来说,如果你的数组是线性,ndim就是1
    正方形就是2,立方体就是3,4维的东西是什么我还不知道你给我科普一下?

    import numpy as np
    
    array = np.array([[1,2,3],[4,5,6]])
    print(array.ndim)
    
    输出如下:
    2
    

    ndarray.shape

    这个方法返回一个包含数组维度的元组,它也可以用于调整数组大小。

    import numpy as np 
    a = np.array([[1,2,3],[4,5,6]])  
    print a.shape
    
    输出如下:
    (2, 3)
    

    如果你想要调整a的长宽高什么的,可以使用array的shape(形状)方法

    # 这会调整数组大小  
    import numpy as np 
    
    a = np.array([[1,2,3],[4,5,6]]) a.shape =  (3,2)  
    print a
    输出如下:
    [[1, 2] 
     [3, 4] 
     [5, 6]]
    

    如果你想要复制调整后的数据然后不改动原来的数据,NumPy 也提供了reshape函数来调整数组大小,这里的数据是可以复制的且不会影响原来的数据

    import numpy as np 
    a = np.array([[1,2,3],[4,5,6]]) 
    b = a.reshape(3,2)  
    print b
    输出如下:
    [[1, 2] 
     [3, 4] 
     [5, 6]]
    

    ndarray.size

    这个方法可以返回一共有多少元素在这个多维数组里面,就相当于遍历了一遍

    import numpy as np 
    a = np.array([[1,2,3],[4,5,6]])  
    print a.size
    
    输出如下:
    6
    

    0x03 dtype!Numpy里面的数据类型

    每一种array我们都可以定义他的type,是用小数形式存在呢还是整数形式
    这些我们都可以在最开始创建他的时候进行一个定义
    array的type叫做dtype【智障名字每次我都记错】、
    在Numpy里面有一些自带的格式,但是注意使用这些格式之前我们需要在前面加上一个np.格式符 表格我贴在下面了

    import numpy as np
    a = np.array([2,3,4],dtype=np.int)
    print(a.dtype)
    输出如下:
    int64
    

    我们也可以把他们改成小数形式(float),只要改变dtype里面的值就可以了
    32和64的区别就相当于short和long long吧,通常来说位数越小所占用的空间也就越小,但是精确的话占用的内存和空间也会很大

    如果是多维数组的话:

    a = np.array([[1,2],[3,4],[5,6]],dtype=np.int)
    #记住前面写完了每行最后外面一定一定要打一个中括号
    

    祭出我的数据类型表:

    序号 数据类型及描述
    1. bool_ 存储为一个字节的布尔值(真或假)
    2. int_ 默认整数,相当于 C 的long,通常为int32或int64
    3. intc 相当于 C 的int,通常为int32或int64
    4. intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64
    5. int8 字节(-128 ~ 127)
    6. int16 16 位整数(-32768 ~ 32767)
    7. int32 32 位整数(-2147483648 ~ 2147483647)
    8. int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)
    9. uint8 8 位无符号整数(0 ~ 255)
    10. uint16 16 位无符号整数(0 ~ 65535)
    11. uint32 32 位无符号整数(0 ~ 4294967295)
    12. uint64 64 位无符号整数(0 ~ 18446744073709551615)
    13. float_ float64的简写
    14. float16 半精度浮点:符号位,5 位指数,10 位尾数
    15. float32 单精度浮点:符号位,8 位指数,23 位尾数
    16. float64 双精度浮点:符号位,11 位指数,52 位尾数
    17. complex_ complex128的简写
    18. complex64 复数,由两个 32 位浮点表示(实部和虚部)
    19. complex128 复数,由两个 64 位浮点表示(实部和虚部)

    0x04 基本的数组生成和定义

    下面是一些初始化的栗子:

    numpy.empty

    它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:
    numpy.empty(shape, dtype = float, order = 'C')

    下面的代码展示空数组的例子:
    import numpy as np 
    x = np.empty([3,2], dtype =  int)  
    print x
    输出如下:
    [[22649312    1701344351] 
     [1818321759  1885959276] 
     [16779776    156368896]]
    

    注意:数组元素为随机值,因为它们未初始化。【神奇的C++模样】

    numpy.zeros

    返回特定大小,以 0 填充的新数组。
    numpy.zeros(shape, dtype = float, order = 'C')

    示例 1
    # 含有 5 个 0 的数组,默认类型为 float  
    import numpy as np 
    x = np.zeros(5)  
    print x
    输出如下:
    [ 0.  0.  0.  0.  0.]
    示例 2
    import numpy as np 
    x = np.zeros((5,), dtype = np.int)  
    print x
    输出如下:
    [0  0  0  0  0]
    示例 3
    # 生成矩阵
     a = np.zeros((3,4))
    print(a)
    输出如下:
     [[ 0.  0.  0.  0.]
     [ 0.  0.  0.  0.]
     [ 0.  0.  0.  0.]]
    

    值得一提的是这边默认的数据类型都是float【看那小数点】

    numpy.ones

    返回特定大小,以 1 填充的新数组。
    numpy.ones(shape, dtype = None, order = 'C')

    示例 1
    # 含有 5 个 1 的数组,默认类型为 float  
    import numpy as np 
    x = np.ones(5)  print x
    输出如下:
    [ 1.  1.  1.  1.  1.]
    示例 2
    import numpy as np 
    x = np.ones([2,2], dtype =  int)  
    print x
    输出如下:
    [[1  1] 
     [1  1]]
    

    np.arange

    看arange这个单词,是不是很像range啊
    这个函数的作用是生成一个数列,跟range一模一样

    import numpy as np
    a = np.arange(10,20,2)
    print(a)
    输出如下:
    [10 12 14 16 18]
    

    np.linspace

    np.linspace(初始点,结束点,单位长度)
    这个差不读就是生成一个等差数列吧,单位长度的意思即使初始点和结束中有多少个等差的数字

    import numpy as np
    a = np.linspace(1,10,20)
    print(a)
    print(a.size)#这里我看一下到底是不是有20个元素在里面
    输出如下:
    [  1.           1.47368421   1.94736842   2.42105263   2.89473684
       3.36842105   3.84210526   4.31578947   4.78947368   5.26315789
       5.73684211   6.21052632   6.68421053   7.15789474   7.63157895
       8.10526316   8.57894737   9.05263158   9.52631579  10.        ]
    20
    

    后记

    颤抖着写完....
    想不到C++除了快竟然还以地方比Python好用,直接定义多维数组太爽了

    nArray=[[1,2][3,4][5,6]]
    Traceback (most recent call last):
    
      File "<ipython-input-36-95ddd256759d>", line 1, in <module>
        nArray=[[1,2][3,4][5,6]]
    
    TypeError: list indices must be integers or slices, not tuple
    

    大胆的尝试.gif

    参考链接:
    神奇的Numpy教程
    就是这个南京大学把我劝去学科学计算的

    最后的最后

    来Max的Blog撩小姐姐吧

    相关文章

      网友评论

        本文标题:2018-03-18-数学不好的Scipy入门(一)

        本文链接:https://www.haomeiwen.com/subject/wncuqftx.html