numpy: np.asarray 函数
Syntax
np.asarray(a, dtype=None, order=None)
将结构数据转化为ndarray。
Parameters:
- a : array_like
- dtype : data-type, optional
- order : {‘C’, ‘F’}, optional
Returns:
- out : ndarray
与 np.array 的不同
np.asarray
的定义:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
而 np.array
的定义:
def array(a, dtype=None, order=None):
return array(a, dtype, copy=True, order=order)
如果对象本身即为ndarray,且不改变dtype,则不会copy之
a = np.array([1, 2])
print(np.asarray(a) is a) # True
如果对象本身即为ndarray,且改变dtype,则还是会copy之
a = np.array([1, 2], dtype=np.float32)
print(np.asarray(a, dtype=np.float32) is a) # True
print(np.asarray(a, dtype=np.float64) is a) # False
简而言之:
主要区别在于 np.array
(默认情况下)将会copy该对象,而 np.asarray
除非必要,否则不会copy该对象。
Code
# 将list转换为ndarray
a = [1, 2]
print(np.asarray(a)) # array([1, 2])
# 如果对象本身即为ndarray,且不改变dtype,则不会copy之
a = np.array([1, 2])
print(np.asarray(a) is a) # True
# 如果对象本身即为ndarray,且改变dtype,则还是会copy之
a = np.array([1, 2], dtype=np.float32)
print(np.asarray(a, dtype=np.float32) is a) # True
print(np.asarray(a, dtype=np.float64) is a) # False