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()示例:

 import matplotlib.pyplot as plt
import numpy as np def log_type(name,arr):
print("数组{}的大小:{}".format(name,arr.size))
print("数组{}的维度:{}".format(name,arr.shape))
print("数组{}的维度:{}".format(name,arr.ndim))
print("数组{}元素的数据类型:{}".format(name,arr.dtype))
#print("数组:{}".format(arr.data)) a = np.floor(10*np.random.random((3,4)))
print(a)
log_type('a',a) a1 = a.ravel()
print("a1:{}".format(a1))
log_type('a1',a1)
a1[2] = 100 print(a)
log_type('a',a)

flatten()示例

 import matplotlib.pyplot as plt
import numpy as np def log_type(name,arr):
print("数组{}的大小:{}".format(name,arr.size))
print("数组{}的维度:{}".format(name,arr.shape))
print("数组{}的维度:{}".format(name,arr.ndim))
print("数组{}元素的数据类型:{}".format(name,arr.dtype))
#print("数组:{}".format(arr.data)) a = np.floor(10*np.random.random((3,4)))
print(a)
log_type('a',a) a1 = a.flatten()
print("修改前a1:{}".format(a1))
log_type('a1',a1)
a1[2] = 100
print("修改后a1:{}".format(a1)) print("a:{}".format(a))
log_type('a',a)

squeeze()示例:

1. 没有single-dimensional entries的情况

 import matplotlib.pyplot as plt
import numpy as np def log_type(name,arr):
print("数组{}的大小:{}".format(name,arr.size))
print("数组{}的维度:{}".format(name,arr.shape))
print("数组{}的维度:{}".format(name,arr.ndim))
print("数组{}元素的数据类型:{}".format(name,arr.dtype))
#print("数组:{}".format(arr.data)) a = np.floor(10*np.random.random((3,4)))
print(a)
log_type('a',a) a1 = a.squeeze()
print("修改前a1:{}".format(a1))
log_type('a1',a1)
a1[2] = 100
print("修改后a1:{}".format(a1)) print("a:{}".format(a))
log_type('a',a)

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

2. 有single-dimentional entries 的情况

 import matplotlib.pyplot as plt
import numpy as np def log_type(name,arr):
print("数组{}的大小:{}".format(name,arr.size))
print("数组{}的维度:{}".format(name,arr.shape))
print("数组{}的维度:{}".format(name,arr.ndim))
print("数组{}元素的数据类型:{}".format(name,arr.dtype))
#print("数组:{}".format(arr.data)) a = np.floor(10*np.random.random((1,3,4)))
print(a)
log_type('a',a) a1 = a.squeeze()
print("修改前a1:{}".format(a1))
log_type('a1',a1)
a1[2] = 100
print("修改后a1:{}".format(a1)) print("a:{}".format(a))
log_type('a',a)

numpy.ravel()/numpy.flatten()/numpy.squeeze()的更多相关文章

  1. 学习笔记27—python中numpy.ravel() 和 flatten()函数

    简介 首先声明两者所要实现的功能是一致的(将多维数组降位一维).这点从两个单词的意也可以看出来,ravel(散开,解开),flatten(变平).两者的区别在于返回拷贝(copy)还是返回视图(vie ...

  2. numpy.ravel() vs numpy.flatten()

    首先声明两者所要实现的功能是一致的(将多维数组降为一维),两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflec ...

  3. numpy的ravel()和flatten()函数

    相同点: 两者所要实现的功能是一致的(将多维数组降位一维).这点从两个单词的意也可以看出来,ravel(散开,解开),flatten(变平). In [14]: x=np.array([[1,2],[ ...

  4. Python的 numpy中 numpy.ravel() 和numpy.flatten()的区别和使用

    两者所要实现的功能是一致的(将多维数组降为一维), 两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten() 返回一份拷贝,对拷贝所做的修改不会影响(reflects ...

  5. numpy.ravel() 与 numpy.flatten()

    两者都可实现将多维数组降位一维的功能 numpy.flatten()返回拷贝,对拷贝所做的修改不会影响原始矩阵 numpy.ravel()返回视图,会影响原始矩阵 1)ravel() In [16]: ...

  6. Numpy中的flatten是按照什么方式进行工作。

    a = [[[1,2],[3,4]],[[5,6],[7,8]]] a = np.ndarray(a) array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) type ...

  7. 【numpy】新版本中numpy(numpy>1.17.0)中的random模块

    numpy是Python中经常要使用的一个库,而其中的random模块经常用来生成一些数组,本文接下来将介绍numpy中random模块的一些使用方法. 首先查看numpy的版本: import nu ...

  8. Numpy中扁平化函数ravel()和flatten()的区别

    在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同. 先来看这两个函数的使用: from numpy import * a = ar ...

  9. numpy下的flatten()函数用法

    flatten是numpy.ndarray.flatten的一个函数,其官方文档是这样描述的: ndarray.flatten(order='C') Return a copy of the arra ...

随机推荐

  1. C++多重继承二义性解决

    1. 什么是多重继承的二义性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class A{ public:     void f(); }   class B{ pu ...

  2. WinCE5.0开发环境的建立

    目前WinCE5.0的开发工具主要有以下几种:Platform Builder5.0.EVC4.0+SP4.Visual Studio2005.其中Platform Builder主要用于定制WinC ...

  3. phpok -- 域名问题

    nginx会改变连接的baseurl, 所以要改变nginx的server name的配置. 将网站改为静态也需配置nginx.

  4. iOS文件和文件夹的创建,删除,移动, 拷贝,是否存在及简单数据类型的读写

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  5. Linux中文乱码问题终极解决方法

    方法一: 修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030该文件在用户目录下,对于其他用户,也必须相应修改该文件. 使用该方法时putty能显示中 ...

  6. Java笔记8:Hibernate连接Oracle

    1下载hibernate-3.6.0 Final.zip到任意目录,解压缩后得到hibernate目录 2下载slf4j-1.7.13.zip到任意目录,解压缩后得到slf4j-1.7.13 3操作数 ...

  7. 桌面轻量级数据库的选择:Access、SQLite、自己编写?

    1. Access我们做小项目的时候特别是小的MIS系统一般也都要用数据库来保存数据.经观察大部分的小系统都是用Access数据库,有的系统为了掩盖数据库的类型,把数据文件后缀名改了,其实只要改回到m ...

  8. VB 在Visio 2010 以编程方式创建子进程图

    在2010年Visio以编程方式创建子进程图 Office 2010  https://msdn.microsoft.com/en-us/library/gg650651.aspx   简介: 学习如 ...

  9. Win7如何设置标准账号无法访问我的D盘

    1 右击对应的盘符,选择属性 2 设置对应的权限,比如是否可读,是否可写 3 之后再用这种用户登录就可以知道相应的权限了

  10. JAVA 画图机制

    java学习脚印:深入java绘图机制 写在前面 封装性越好的类在使用时,只要清楚接口即可,而不应该让程序员了解其内部结构; 对于平常的绘图来讲,java绘图机制无需了解太多,但是朦胧容易产生错误,绘 ...