其实这个就像是C++中传参数是直接复制和引用的区别。
np.array是复制,
np.asarray是引用
//C++代码
void fun1(int a)
{a = 3;};
//类似于np.array,调用时会开辟新的内存来存储
void fun2(int &a)
{a = 3;};
//类似于np.asarray,调用时是引用,并不开辟新的内存
int main(){
int x = 4,y = 4;
fun1(x);fun2(y);
print("%d",x);//输出结果是4
print("%d",y);//输出结果是3
return 0;
}
#python代码
import numpy as np
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.]]
##
本文通过类比C++中的传参方式,解释了在Python的NumPy库中使用np.array与np.asarray的区别。np.array操作会产生新的内存分配,而np.asarray则是对原始数组的引用,不会产生额外的内存开销。
3万+

被折叠的 条评论
为什么被折叠?



