关于NumPy中asarray的用法及说明

 更新时间:2022年07月25日 08:53:31   作者:止步听风  
这篇文章主要介绍了关于NumPy中asarray的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

NumPy中asarray的用法

函数说明

asarray(a, dtype=None, order=None)

转换输入为数组 array

输入参数

  • a:类数组。输入数据,可以是转换为数组的任意形式。比如列表、元组列表、元组、元组元组、列表元组和 ndarray;
  • dtype:数据类型,可选。默认情况下,该参数与数据数据类型相同。
  • order:{'C','F'},可选。选择是行优先(C-style)或列优先(Fortran-style)存储。默认为行优先。

返回值

  • out:ndarray。‘a’ 的数组形式。如果输入已经是匹配 dtype 和 order 参数的 ndarray 形式,则不执行复制,如果输入是 ndarray 的一个子类,则返回一个基类 ndarray。

实例

将列表转换为数组

>>> a = [1, 2]
>>> np.asarray(a)
array([1, 2])

存在的数组不会被复制

>>> a = np.array([1, 2])
>>> np.asarray(a) is a
True

如果 “dtype” 参数存在,只有当 dtype 不匹配的时候数组才被匹配。 

>>> a = np.array([1, 2], dtype=np.float32)
>>> np.asarray(a, dtype=np.float32) is a
True
>>> np.asarray(a, dtype=np.float64) is a
False

与 “asanyarray” 不同,ndarray 子类不被转换

>>> issubclass(np.recarray, np.ndarray)
True
>>> a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
>>> np.asarray(a) is a
False
>>> np.asanyarray(a) is a
True

numpy中array,asarray和asanyarray区别

先讨论默认情况下

1、array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。

也就是说当数据=是ndarray时,a = array(b),a和b不再是占用同一个内存的数组,而asarray中,a和b是同一个,改变b即改变a。

2、asarray和asanyarray的区别,np.asanyarray 会返回 ndarray 或者ndarray的子类,而np.asarray 只返回 ndarray. 也就是说对于ndarray的子类,asanyarray是不会复制的。

array、asarray,asanyarray的区别还受到两个参数控制

即copy和subok,下面具体举例

而array默认设置copy=True

假设a是一个数组,m是一个矩阵,它们的数据类型都是float32:

  • np.array(a)和np.array(m)都将复制,因为这是默认行为。
  • np.array(a,copy=False)和np.array(m,copy=False)将复制m而不是a,因为m不是ndarray。
  • np.array(a,copy=False,subok=True)和np.array(m,copy=False,subok=True)都不会复制,因为m是矩阵,它是ndarray的子类。
  • 由于数据类型不兼容,数组(a,dtype=int,copy=False,subok=True)将同时复制两者。
  • asanyarray:如果输入是兼容的ndarray或类似matrix的子类(copy=False,subok=True),则将返回未复制的输入。

下面举几个详细的例子

array和asarray的区别

import numpy as np  
  
#example 1:  
data1=[[1,1,1],[1,1,1],[1,1,1]]  
arr2=np.array(data1)  
arr3=np.asarray(data1)  
data1[1][1]=2  
print 'data1:\n',data1  
print 'arr2:\n',arr2  
print 'arr3:\n',arr3

输出

data1:  
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]  
arr2:  
[[1 1 1]  
 [1 1 1]  
 [1 1 1]]  
arr3:  
[[1 1 1]  
 [1 1 1]  
 [1 1 1]]

结论:面对元组数据结构,array和asarray没有区别,都对元数据进行了复制并转化为ndarray。

import numpy as np  
  
#example 2:  
arr1=np.ones((3,3))  
arr2=np.array(arr1)  
arr3=np.asarray(arr1)  
arr1[1]=2  
print 'arr1:\n',arr1  
print 'arr2:\n',arr2  
print 'arr3:\n',arr3

输出

arr1:  
[[ 1.  1.  1.]  
 [ 2.  2.  2.]  
 [ 1.  1.  1.]]  
arr2:  
[[ 1.  1.  1.]  
 [ 1.  1.  1.]  
 [ 1.  1.  1.]]  
arr3:  
[[ 1.  1.  1.]  
 [ 2.  2.  2.]  
 [ 1.  1.  1.]]

结论:当数据源是ndarray时,array会copy出一个副本,占用新的内存,但asarray不会。

asarray和asanyarray的区别例子

issubclass(np.matrix, np.ndarray)
True
a = np.matrix([[1, 2]])
np.asarray(a) is a#返回的不是子类。
False
np.asanyarray(a) is a#np.asanyarray(a)返回是a的子类
True

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python第三方库face_recognition在windows上的安装过程

    Python第三方库face_recognition在windows上的安装过程

    今天为大家介绍下face recognition在Windows系统上安装与使用,但在Windows平台上face recognition性能会有所下降
    2019-05-05
  • Python实现邮件发送功能的方法详解

    Python实现邮件发送功能的方法详解

    本文将学会各种类型的邮件发送方式,比如普通文本邮件、带附件的邮件等等,如何通过程序发送邮件现在我们还不太了解,接下来就会为大家进行详细的介绍
    2022-05-05
  • Python学习之随机模块random详解

    Python学习之随机模块random详解

    本文我们将学习一下Python中非常简单但也非常有用的模块—random ,此模块主要用于生成随机数,接下来就让我们了解一下random模块中最常见的几种方法吧
    2022-03-03
  • Python2.x版本中maketrans()方法的使用介绍

    Python2.x版本中maketrans()方法的使用介绍

    这篇文章主要介绍了Python2.x版本中maketrans()方法的使用介绍,是Python学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • python 元组和列表的区别

    python 元组和列表的区别

    这篇文章主要介绍了python 元组和列表的区别,帮助大家更好的理解和学习python 数据类型的相关知识,感兴趣的朋友可以了解下
    2020-11-11
  • Python时间戳转换为字符串与字符串转换为时间戳

    Python时间戳转换为字符串与字符串转换为时间戳

    在编写代码时,往往涉及时间、日期、时间戳的相互转换,下面这篇文章主要给大家介绍了关于Python时间戳转换为字符串与字符串转换为时间戳的相关资料,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-02-02
  • Python frozenset集合的实现

    Python frozenset集合的实现

    frozenset是Python中的不可变集合类型,本文主要介绍了Python frozenset集合的实现, 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Python图片的横坐标汉字实例

    Python图片的横坐标汉字实例

    今天小编就为大家分享一篇Python图片的横坐标汉字实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python3.x实现base64加密和解密

    python3.x实现base64加密和解密

    这篇文章主要为大家详细介绍了python3.x实现base64加密和解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 22个Python的万用公式分享

    22个Python的万用公式分享

    在大家的日常python程序的编写过程中,都会有自己解决某个问题的解决办法,或者是在程序的调试过程中,用来帮助调试的程序公式。小编通过几十万行代码的总结处理,总结出了22个python万用公式,可以帮助大家解决在日常的python编程中遇到的大多数问题,一起来看看吧
    2022-12-12

最新评论