- array和asarray的区别
- 看asarray的定义:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
- 和
array
相似, 除了默认设置copy=False. 而array
默认设置copy=True - 所以主要的不同在于array对目标做一个拷贝,而asarray不会。
例子:
>> A = numpy.matrix(np.ones((3,3)))
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
array修改的是A的拷贝:
>>> numpy.array(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
asarray修改的A本身:
>>> numpy.asarray(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
np.asanyarray 会返回 ndarray 或者ndarray的子类,而np.asarray 只返回 ndarray.
例子:
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://www.quora.com/What-is-the-difference-among-np-array-np-asarray-and-np-asanyarray-when-numpy-creates-array-from-an-array-like-object
https://stackoverflow.com/questions/14415741/numpy-array-vs-asarray
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.asanyarray.html