关于是否复制:
当数据源是list时,三者都复制。
当数据源是ndarray或其子类(numpy.matrix)时,array复制,asarray和asanyarray不复制
关于返回类:
array和asarray 只返回 ndarray
asanyarray 会返回 ndarray 或者ndarray的子类
当数据源是list或ndarray时,三者都返回ndarray。
当数据源是ndarray的子类(matrix)时,array和asarray 返回 ndarray,而asanyarray 返回子类(matrix)。
无脑总结:带as的尽量不复制,带any的尽量不改变类型。
附测试代码:
import numpy as np
print(issubclass(np.matrix, np.ndarray)) # 返回True,说明matrix是ndarray的子类
s = [[1,1,1],[1,1,1],[1,1,1]] # [[1,1,1],[1,1,1],[1,1,1]] # np.ones((3,3)) # np.matrix(np.ones((3,3)))
a=np.array(s)
b=np.asarray(s)
c=np.asanyarray(s)
s[1]=2
print(type(a))
print(a)
print(a is s)
print(type(b))
print(b)
print(b is s)
print(type(c))
print(c)
print(c is s)
参考:
Numpy:array、asarray、asanyarray
numpy中array,asarray和asanyarray的区别