联系
np.array()和nb.asarray()都可以将结构数据转化为ndarray对象。
区别
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)
从定义中可以看出两者的主要区别在于 np.array(默认情况下)将会copy该对象,而 np.asarray除非必要,否则不会copy该对象。
代码实例:
date_1 = [[1, 2, 3, 4],
[5, 6, 7, 8]]
print("date_1:\n", date_1)
date_array = np.array(date_1)
date_asarray = np.asarray(date_1)
date_1[1][1] = 9 # 对原列表进行修改
print("type(date_array): ", type(date_array))
print("date_array:\n", date_array)
print("type(date_asarray): ", type(date_asarray))
print("date_asarray:\n", date_asarray)
'''
date_1:
[[1, 2, 3, 4], [5, 6, 7, 8]]
type(date_array): <class 'numpy.ndarray'>
date_array:
[[1 2 3 4]
[5 6 7 8]]
type(date_asarray): <class 'numpy.ndarray'>
date_asarray:
[[1 2 3 4]
[5 6 7 8]]
'''
# 从结果中可以看出两者此时没有区别,都对元数据进行了复制
date_2 = np.arange(12).reshape(3, 4)
print("date_2:\n", date_2)
date_array_2 = np.array(date_2)
date_asarray_2 = np.asarray(date_2)
date_2[0][0] = 21
print("date_array:\n", date_array_2)
print("date_asarray:\n", date_asarray_2)
'''
date_2:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
date_array:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
date_asarray:
[[21 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
# 从结果可以看出当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,
# 但asarray不会。