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默认设置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



