zoukankan      html  css  js  c++  java
  • numpy.ravel()/numpy.flatten()/numpy.squeeze()

    numpy.ravel(a, order='C')

      Return a flattened array

    numpy.chararray.flatten(order='C')

      Return a copy of the array collapsed into one dimension

    numpy.squeeze(a, axis=None)

      Remove single-dimensional entries from the shape of an array.

    相同点: 将多维数组 降为 一维数组

    不同点:

      ravel() 返回的是视图(view),意味着改变元素的值会影响原始数组元素的值;

      flatten() 返回的是拷贝,意味着改变元素的值不会影响原始数组;

      squeeze()返回的是视图(view),仅仅是将shape中dimension为1的维度去掉;

    ravel()示例:

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 
     4 def log_type(name,arr):
     5     print("数组{}的大小:{}".format(name,arr.size))
     6     print("数组{}的维度:{}".format(name,arr.shape))
     7     print("数组{}的维度:{}".format(name,arr.ndim))
     8     print("数组{}元素的数据类型:{}".format(name,arr.dtype))
     9     #print("数组:{}".format(arr.data))
    10     
    11 a = np.floor(10*np.random.random((3,4)))
    12 print(a)
    13 log_type('a',a)
    14 
    15 a1 = a.ravel()
    16 print("a1:{}".format(a1))
    17 log_type('a1',a1)
    18 a1[2] = 100
    19 
    20 print(a)
    21 log_type('a',a)

    flatten()示例

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 
     4 def log_type(name,arr):
     5     print("数组{}的大小:{}".format(name,arr.size))
     6     print("数组{}的维度:{}".format(name,arr.shape))
     7     print("数组{}的维度:{}".format(name,arr.ndim))
     8     print("数组{}元素的数据类型:{}".format(name,arr.dtype))
     9     #print("数组:{}".format(arr.data))
    10     
    11 a = np.floor(10*np.random.random((3,4)))
    12 print(a)
    13 log_type('a',a)
    14 
    15 a1 = a.flatten()
    16 print("修改前a1:{}".format(a1))
    17 log_type('a1',a1)
    18 a1[2] = 100
    19 print("修改后a1:{}".format(a1))
    20 
    21 print("a:{}".format(a))
    22 log_type('a',a)

    squeeze()示例:

    1. 没有single-dimensional entries的情况

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 
     4 def log_type(name,arr):
     5     print("数组{}的大小:{}".format(name,arr.size))
     6     print("数组{}的维度:{}".format(name,arr.shape))
     7     print("数组{}的维度:{}".format(name,arr.ndim))
     8     print("数组{}元素的数据类型:{}".format(name,arr.dtype))
     9     #print("数组:{}".format(arr.data))
    10     
    11 a = np.floor(10*np.random.random((3,4)))
    12 print(a)
    13 log_type('a',a)
    14 
    15 a1 = a.squeeze()
    16 print("修改前a1:{}".format(a1))
    17 log_type('a1',a1)
    18 a1[2] = 100
    19 print("修改后a1:{}".format(a1))
    20 
    21 print("a:{}".format(a))
    22 log_type('a',a)

    从结果中可以看到,当没有single-dimensional entries时,squeeze()返回额数组对象是一个view,而不是copy。

    2. 有single-dimentional entries 的情况

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 
     4 def log_type(name,arr):
     5     print("数组{}的大小:{}".format(name,arr.size))
     6     print("数组{}的维度:{}".format(name,arr.shape))
     7     print("数组{}的维度:{}".format(name,arr.ndim))
     8     print("数组{}元素的数据类型:{}".format(name,arr.dtype))
     9     #print("数组:{}".format(arr.data))
    10 
    11 a = np.floor(10*np.random.random((1,3,4)))
    12 print(a)
    13 log_type('a',a)
    14 
    15 a1 = a.squeeze()
    16 print("修改前a1:{}".format(a1))
    17 log_type('a1',a1)
    18 a1[2] = 100
    19 print("修改后a1:{}".format(a1))
    20 
    21 print("a:{}".format(a))
    22 log_type('a',a)

  • 相关阅读:
    Mac安装LightGBM
    用于视频超分辨率的可变形三维卷积
    ORB-SLAM3 单目地图初始化(终结篇)
    重用地图的单目视觉惯导SLAM系统
    2020,我的秋招感悟!
    超详细解读ORB-SLAM3单目初始化(下篇)
    基于改进的点对特征的6D位姿估计
    深入研究自监督单目深度估计:Monodepth2
    ORB-SLAM3 细读单目初始化过程(上)
    基于视觉和惯性传感器的移动机器人手遥操作系统
  • 原文地址:https://www.cnblogs.com/black-mamba/p/9183704.html
Copyright © 2011-2022 走看看