Advertisement

numpy中np.array和np.asarray的差异及其tolist方法

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
在Python的科学计算库NumPy中,`np.array()`和`np.asarray()`分别用于生成数组的对象方法,在处理现有数据时存在具体表现上的差异。本文将深入分析这两个函数的具体区别,并介绍`.tolist()`该方法的主要作用是将数组转换为可序列化的数据结构。让我们掌握 `np.array()` 和 `np.asarray()` 的核心功能。这些函数都能将不同类型的数据结构(如列表、元组)转换为NumPy的多维数组(ndarray)。然而,当输入已经是ndarray时,它们的处理方式就有所不同了。 **当输入为列表时**: - `np.array()` 会生成一个新的ndarray对象,即使输入已经是ndarray类型,它也会复制数据内容并占用独立的内存区域。 - `np.asarray()` 在输入是ndarray的情况下,将直接返回一个引用相同的数组对象,因此修改原始数组会影响该assembled对象。 ```python a = [[1,2,3],[4,5,6],[7,8,9]] b = np.array(a) c = np.asarray(a) a[2] = 1 print(a) # 修改列表不影响b和c print(b) print(c) ```在输入为ndarray的情况下,在使用np.array()时会生成一个独立于原始数据的新副本。而采用np.asarray()方法则会返回一个基于原始数据的视图(view),因此修改原始数组后该ndarray的内容也会相应更新。```python a = np.random.random((3,3)) print(a.dtype) b = np.array(a, dtype=float64) # 创建副本 c = np.asarray(a, dtype=float64) # 创建视图 a[2] = 2 print(a) print(b) # b不受a影响 print(c) # c受a影响,因为是视图 ```如前所述,在示例中当进行数据类型更改时,使用 `np.array()` 方法会产生一个新的数组。相比之下,`np.asarray()` 仅用于数据类型的转换而不进行复制。因此,在使用浮点型输入的情况下,即使修改原始数值,基于 `np.asarray()` 创建的数组也会反映这些变化。 3. **转换为列表类型**: `.tolist()`方法能够将ndarray对象转化为Python内置的列表数据结构。这个操作特别适用于需要将数组序列化或与其他不支持ndarray格式的数据处理库进行交互的情形,这是因为原始的数据结构无法直接被这些系统使用。在此过程中,数据会被重新组织以适应目标系统的存储和传输需求。 此操作特别适用于需将数据转换为其他格式(如JSON或XML)进行存储或传输的情形,这是因为原始的数据结构无法直接被这些系统使用。数据序列化是指将原始信息按照特定格式编码以便于保存和交换的过程,常见的表现形式包括JSON和XML等标准格式。 ```python a = np.random.random((3,3)) b = a.tolist() a[1] = 2 print(a) # 修改ndarray会影响自身 print(b) # 不影响转换后的列表 ``` 补充知识:在计算机视觉库OpenCV中,我们偶尔需要将整数转换为固定长度的字符串。例如,在保存图像文件名时,这会有所帮助。`cv::format`函数能够让我们精确设置数值的小数位数。```cpp int currentFrame = 2; std::stringstream frame_name; frame_name << cv::format(%.3d, currentFrame) << .jpg; 或者使用C++11的字符串操作 std::string save_frame_path = std::to_string(currentFrame).substr(0,3) + .jpg; ```总体而言,在创建ndarray时,`np.array()`和`np.asarray()`的核心区别在于数据复制策略的不同。而`.tolist()`这一方法则主要用于将一个ndarray转换为可访问的Python列表结构。掌握这些差异对有效地管理与操作NumPy数组具有关键的重要性。当处理大数据量时,尽量减少不必要的数据拷贝能够明显提升程序运行效率。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 浅析numpynp.array()与np.asarray区别.tolist()功能
    优质
    本篇文章主要探讨了Python科学计算库NumPy中的两个重要函数`np.array()`和`np.asarray()`之间的区别,并介绍了`.tolist()`方法的功能及其应用场景。适合需要深入理解NumPy数组创建方式的读者阅读。 `array` 和 `asarray` 都可以将结构化数据转换为 NumPy 的 ndarray 类型。但是两者的主要区别在于:当输入的数据已经是 ndarray 时,使用 `array()` 方法会创建一个新的副本并占用新的内存空间;而使用 `asarray()` 则不会生成新副本。 在以下示例中: 1. 当输入是列表时: ```python a = [[1,2,3],[4,5,6],[7,8,9]] b = np.array(a) c = np.asarray(a) # 更改原始列表中的值 a[2] = 1 print(a) # 输出:[[1, 2, 3], [4, 5, 6], [1]] print(b) # 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(c) # 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]] ``` 我们可以看到,无论是使用 `np.array()` 还是 `np.asarray()` ,都会将输入列表转换为矩阵格式。而且当原始的列表被修改时,并不会影响到已经转化为 ndarray 的值。 2. 当输入已经是数组的时候: ```python a = np.random.random((3, 4)) ``` 在这种情况下,使用`array()` 和 `asarray()` 方法的具体行为会有所不同:如果 a 已经是 ndarray 类型,则调用 `np.asarray(a)` 将不会创建新的副本。而使用 `np.array(a)` 则会产生一个新的数组对象占用额外的内存空间。 因此,在处理已存在的 NumPy 数组时,为了避免不必要的资源消耗,请优先考虑使用`asarray()` 方法。
  • 简述Pythonnp.arrayshape( ,)( ,1)
    优质
    本文探讨了Python NumPy库中的数组对象`np.array`在不同维度设置(如`(,)`和`(,1)`)下的区别,帮助读者理解形状参数对数据结构的影响。 如下所示: ```python import numpy as np x = np.array([1, 2]) y = np.array([[1], [2]]) z = np.array([[1, 2]]) print(x.shape) # 输出 (2,) print(y.shape) # 输出 (2, 1) print(z.shape) # 输出 (1, 2) 数组 x 的 shape 值为 (2,),表示这是一个一维数组,包含两个元素。 数组 y 的 shape 值为 (2, 1),表示这是一个二维数组,每行有且仅有一个元素。 数组 z 的 shape 值为 (1, 2),同样是一个二维数组,但这里的每一行含有两个元素。 ```
  • Pythonany()all()函数使用解析
    优质
    本篇文章详细介绍了Python中的any()与all()两个函数的具体用法,并分析了它们之间的主要区别。通过实例帮助读者更好地理解这两个函数的应用场景及各自的特性。 any函数:如果列表x中的任何一个元素不是空值、0或False,则返回True;否则返回False。all(x)函数要求列表x中的所有元素都不是空值、0或False,才会返回True;否则返回False。本段落将介绍Python中any()和all()这两个函数的使用方法及其区别。
  • Vue.jsComputed、Filter、GetSet使用详解
    优质
    本文深入探讨了在Vue.js框架下如何运用computed属性、filter过滤器以及getters与setters,并详细解析它们之间的区别。通过具体示例,帮助开发者理解这些功能的应用场景及优势,以优化代码逻辑和提高开发效率。 下面为大家分享一篇关于vue.js的computed,filter,get,set用法及区别的详解文章,具有很好的参考价值,希望对大家有所帮助。一起跟随了解详情吧。
  • JSinnerHTMLinnerText使用
    优质
    本文详细介绍了JavaScript中的两个常用属性——innerHTML与innerText。通过比较两者在操作HTML元素文本内容时的不同之处,帮助读者更好地理解并灵活运用它们。 在JavaScript中,`innerHTML`与`innerText`都是用于操作DOM元素内容的属性,但它们之间存在一些重要的区别。 - `innerHTML`: 这个属性可以用来获取或设置HTML元素内的完整HTML源代码。使用它时可以直接插入新的HTML片段到页面上,并且支持解析和渲染这些新加入的内容中的标签结构。 - `innerText`: 相较于`innerHTML`, `innerText`只包含纯文本内容,不包括任何内部的HTML标记。这意味着当你设置或获取元素的`innerText`属性值时,不会影响或者被其他嵌套在其中的HTML元素所改变。 简单来说,在需要更新带有复杂结构和样式的内容时使用`innerHTML`; 如果只是想显示一些简单的文字信息而不需要解析任何标签,则更适合用到`innerText`.
  • 共模概念
    优质
    本文探讨了电子工程中重要的信号概念——共模与差模。详细解析二者定义、特性和应用场景,并分析它们之间的区别。 本段落介绍共模与差模的含义及它们之间的区别。
  • CPLDFPGA用途
    优质
    本文介绍了复杂可编程逻辑器件(CPLD)与现场可编程门阵列(FPGA)的基本用途,并探讨了两者之间的主要区别。 本段落探讨了FPGA/CPLD的功能以及它们之间的区别。
  • Android广播两种注册
    优质
    本文介绍了在Android开发中使用广播接收器时常见的两种注册方式——动态和静态,并详细对比了它们之间的区别。 通过两个工程展示了广播的两种注册方式及其区别。其中一个工程使用两种方式进行广播注册,另一个工程则负责发起广播。需要注意的是,在应用尚未启动的情况下,无论采用哪种形式进行注册,都无法接收到广播信息。
  • 关于Pythoncutqcut用详细说明
    优质
    本篇文章深入解析了Python中的cut与qcut函数使用方法及二者之间的区别,旨在帮助读者理解并灵活应用这两个在数据分箱操作中常用的pandas库函数。 今天为大家分享一篇关于Python中的cut和qcut用法及区别的详解文章,相信会对大家有所帮助。希望大家能跟随本段落一起学习。