本文主要是介绍np.array()和np.asarray()的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文献:
numpy中array和asarray的区别
numpy: np.asarray 函数
主要区别在于 np.array
(默认情况下)将会copy该对象,而 np.asarray
除非必要,否则不会copy该对象。
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但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没有区别,都对元数据进行了复制。
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.]]
此时两者才表现出区别。修改了arr1,arr3也会跟着修改。
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)
简而言之:
主要区别在于 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
这篇关于np.array()和np.asarray()的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!