np.array()和np.asarray()的區別


np.array()和np.asarray()的區別

一、總結

一句話總結:

是否copy:主要區別在於 np.array (默認情況下)將會copy該對象,而 np.asarray 除非必要,否則不會copy該對象。
和array功能相關:y_train = np.asarray(train_labels).astype('float32')

 

二、np.array()和np.asarray()的區別

轉自或參考:np.array()和np.asarray()的區別
https://blog.csdn.net/Rex_WUST/article/details/85205179


主要區別在於 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM