全球滚动:关于NumPy中asarray的用法及说明
来源:脚本之家    时间:2022-07-25 10:01:37
目录
NumPy中asarray的用法函数说明输入参数返回值实例numpy中array,asarray和asanyarray区别先讨论默认情况下array、asarray,asanyarray的区别还受到两个参数控制下面举几个详细的例子

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

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

关键词: 数据类型 也就是说 数据结构 希望大家 输入数据

上一篇:

下一篇:

X 关闭

X 关闭