• numpy中的ravel(),faltten(),squeeze()的区别与使用


    首先,这三个方法都可以将多维数组变为一维数组

    区别:

     - ravel():如果没有必要,不会产生源数据的副本

     - flatten():返回源数据的副本

     - squeeze():只能对维数为一的维度降维

    另外,reshape(-1)也有拉平数组的功效

    代码演示如下:

    import numpy as np
    
    arr = np.arange(12).reshape(3,4)
    print('原数组')
    print(arr)
    print('---')
    print('经过ravel变换的数组')
    temp = arr.ravel()
    print(temp)
    temp[3] = 1
    print('---')
    print('原数组')
    print(arr)
    
    print('==============================')
    arr = np.arange(12).reshape(3,4)
    print('原数组')
    print(arr)
    print('---')
    temp = arr.flatten()
    print('经过flatten变换的数组')
    print(temp)
    print('---')
    print('原数组')
    temp[3] = 1
    print(arr)
    
    print('==============================')
    arr = np.arange(12).reshape(3,4)
    print('原数组')
    print(arr)
    print('---')
    print('经过squeeze变换的数组')
    print(arr.squeeze())
    print('---')
    print('重新定义维度为一的数组')
    arr = np.arange(12).reshape(12,1)
    print('---')
    print('经过squeeze变换的一维数组')
    print(arr.squeeze())

    结果如下图:

     可以看到,经过ravel变换后,对新对象进行操作会影响到原数组,而flatten不存在这种问题

    以上

    希望对大家有所帮助

  • 相关阅读:
    mac 卸载 node并重新安装
    最小的Django应用
    Python如何实现文本转语音
    Python语言库pyttsx3
    大数据资料
    剑指offer(29)最小的K个数
    剑指offer(28)数组中出现次数超过一半的数
    剑指offer(27)字符串的排列
    剑指offer(26)二叉搜索树与双向链表
    JS、JAVA刷题和C刷题的一个很重要的区别
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/13728682.html
Copyright © 2020-2023  润新知