美文网首页
转numpy学习ravel() 和 flatten()

转numpy学习ravel() 和 flatten()

作者: Jarvan_c806 | 来源:发表于2019-03-25 17:01 被阅读0次

    numpy的ravel() 和 flatten()函数

    简介

    首先声明两者所要实现的功能是一致的(将多维数组降位一维)。这点从两个单词的意也可以看出来,ravel(散开,解开),flatten(变平)。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

    两者功能

    In [14]: x=np.array([[1,2],[3,4]])
    
    # flattenh函数和ravel函数在降维时默认是行序优先
    In [15]: x.flatten()
    Out[15]: array([1, 2, 3, 4])
    
    In [17]: x.ravel()
    Out[17]: array([1, 2, 3, 4])
    
    # 传入'F'参数表示列序优先
    In [18]: x.flatten('F')
    Out[18]: array([1, 3, 2, 4])
    
    In [19]: x.ravel('F')
    Out[19]: array([1, 3, 2, 4])
    
    #reshape函数当参数只有一个-1时表示将数组降为一维
    In [21]: x.reshape(-1)
    Out[21]: array([1, 2, 3, 4])
    #x.T表示x的转置
    In [22]: x.T.reshape(-1)
    Out[22]: array([1, 3, 2, 4])
    

    两者区别

    >>> x = np.array([[1, 2], [3, 4]])
    >>> x.flatten()[1] = 100
    >>> x
    array([[1, 2],
           [3, 4]])            
    >>> x.ravel()[1] = 100
    >>> x
    array([[  1, 100],
           [  3,   4]])
    

    通过上面的程序可以发现flatten函数返回的是拷贝
    原文链接:numpy 辨异 (五)—— numpy.ravel() vs numpy.flatten()

    相关文章

      网友评论

          本文标题:转numpy学习ravel() 和 flatten()

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