• NumPy的思考……



    问题:

      为什么第一次输出矩阵形式的数据,第二次输出list形式的数据?

    详见代码:

    a = np.array([[1, 2], [3, 4]])
    print(a)
    print('ndim :', a.ndim)

    控制台输出:

    [[1 2]
     [3 4]]
    ndim : 2

    然而,代码修改一下:

    b = np.array([[11, 12], [14, 16, 17]])
    print(b)
    print(type(b))

     控制台输出:

    [list([11, 12]) list([14, 16, 17])]
    <class 'numpy.ndarray'>

    答案:

      第二次输出元素 [ [11, 12], [14, 16, 17] ] 在形式上不能用矩阵形式输出,不对称。


    问题:

    array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
    order : {'K', 'A', 'C', 'F'}, optional
                Specify the memory layout of the array. order参数用于:指定数组的内存布局。

      order的作用体现在哪里?

      怎么才能看出数组的内存布局?

     答案:

      ndarray.flags属性, 查看ndarray对象的内存信息

      C_CONTIGUOUS : True        c_contiguous(连续的)
      F_CONTIGUOUS : False        f_contiguous
      OWNDATA : True           own data
      WRITEABLE : True          writeable
      ALIGNED : True           aligned(对齐)
      WRITEBACKIFCOPY : False     write back if copy
      UPDATEIFCOPY : False       update if copy

    sin():

    Parameters
        ----------
        x : array_like
            Angle, in radians (:math:`2 pi` rad equals 360 degrees).

    2 pi = 2π

    360°等于2π弧度
    在数学和物理中,弧度是角的量度单位.它是由国际单位制导出的单位,单位缩写是rad.(radians)

    弧度定义:弧长等于圆半径的弧所对的圆心角为1弧度

    根据定义,一周的弧度数为2πr/r=2π, 360°角=2π弧度,因此,1弧度约为57.3°,即57°17'44.806'',1°为π/180弧度,近似值为0.01745弧度,周角为2π弧度, 平角(即180°角)为π弧度, 直角为π/2弧度.
    在具体计算中,角度以弧度给出时,通常不写弧度单位,直接写值.最典型的例子是三角函数,如sin 8π、tan (3π/2).
    弧长公式:
    l rad=nπr/180
    在这里,n就是角度数.


    np.repeat()使用技巧

    c = np.array([[1, 2, 3]])
    c = c.reshape(-1, 3).repeat(2, 0)
    输出c:
    [[1, 2, 3],
     [1, 2, 3]]
    =====================
    cc = c.reshape(-1, 3)
    # -1代表不管行数,只是确定列数为3
    
    # repeat用法
    d = c.reshape(-1, 3)
    d.repeat(2, 0)                           可以
    d.repeat(preats=2, axis=0)               可以
    np.repeat(d, 2, 0)                       也可以                        

    问题:

      同样是order排序,传入'C','F'不同,则打印不同?

    代码:

    import numpy as np
    a = np.arange(0, 60, 5).reshape((3, 4))
    print(a)
    for x in np.nditer(a,flags=['external_loop'], order='C'):
        print(x, end=', ')

    控制台输出:

    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    [ 0  5 10 15 20 25 30 35 40 45 50 55], 

    然而,代码:

    import numpy as np
    a = np.arange(0, 60, 5).reshape((3, 4))
    print(a)
    for x in np.nditer(a,flags=['external_loop'], order='F'):
        print(x, end=', ')

    控制台输出:

    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    [ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],

    答案:

      迭代器遍历对应于每列,并组合为一维数组。(默认)


    问题:

      a.T在nditer中迭代不应该输出

    [[0 3]
     [1 4]
     [2 5]]

      吗?

    代码:

    a = np.arange(6).reshape(2, 3)
    print(a)
    print(a.T)
    print(a.T.flags)
    for x in np.nditer(a.T):
        print(x, end=', ')
    print('
    ')

    控制台输出:

    [[0 1 2]
     [3 4 5]]
    
    [[0 3]
     [1 4]
     [2 5]]
    
      C_CONTIGUOUS : False
      F_CONTIGUOUS : True
      OWNDATA : False
      WRITEABLE : True
      ALIGNED : True
      WRITEBACKIFCOPY : False
      UPDATEIFCOPY : False
    
    0, 1, 2, 3, 4, 5, 

    答案:

      np.nditer(..., order='K') :

        order参数默认‘K’

      源码中,as close sth. as possible : 尽可能靠近

    'K' means as close to the order the array elements appear in memory as possible.

      翻译:'K' 意味着,(顺序要)尽可能靠近内存中出现的的数组的元素顺序。   


    =============================================

  • 相关阅读:
    路由器 命令行基础
    docker 学习
    flume 配置
    CentOS 7 安装字体库 & 中文字体
    centos7 web服务器内核优化
    hive 搭建
    varnish4.1 配置文件default.vcl
    varsh4.1 安装清除cache
    jvm 配置
    centos7优化内核参数详解
  • 原文地址:https://www.cnblogs.com/daemonFlY/p/10029667.html
Copyright © 2020-2023  润新知