关于NumPy中asarray的用法及说明

作者:止步听风 时间:2023-01-07 17:55:12 

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

来源:https://blog.csdn.net/SAKURASANN/article/details/102880567

标签:NumPy,asarray
0
投稿

猜你喜欢

  • 微信小程序获取当前位置的详细步骤

    2024-04-08 10:52:09
  • python中列表添加元素的几种方式(+、append()、extend())

    2022-07-17 19:59:42
  • 通过Python来使用七牛云存储的方法详解

    2022-09-13 19:56:36
  • ASP 常见的连接字符串写法(access2007)

    2011-03-25 10:40:00
  • 安装MySQL 5后无法启动(不能Start service)解决方法小结

    2024-01-23 07:29:29
  • 解决python3.6 右键没有 Edit with IDLE的问题

    2023-07-31 17:15:00
  • 使用IP地址来统计在线人数方法

    2007-08-13 12:51:00
  • python smtplib模块自动收发邮件功能(二)

    2023-09-29 19:52:28
  • python 上下文管理器使用方法小结

    2021-08-11 07:27:30
  • Ajax+Servlet+jsp显示搜索效果

    2023-06-14 08:29:34
  • 详解JavaScript中var和let的区别

    2024-04-29 13:23:14
  • ASP--IP字段截取

    2009-05-26 15:47:00
  • python实现批量文件重命名

    2021-03-25 22:04:38
  • matplotlib subplots 设置总图的标题方法

    2022-10-09 13:49:42
  • Python基于回溯法子集树模板解决选排问题示例

    2023-02-15 18:12:37
  • 深入浅析MySQL从删库到跑路_高级(一)——数据完整性

    2024-01-24 22:39:59
  • Python函数参数分类原理详解

    2022-02-26 17:05:57
  • TypeScript学习之强制类型的转换

    2024-04-25 13:08:07
  • SQL Server中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

    2024-01-18 03:06:54
  • JavaScript面向对象的简单介绍

    2008-06-27 12:37:00
  • asp之家 网络编程 m.aspxhome.com