zoukankan      html  css  js  c++  java
  • 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:
    ',data1
    print 'arr2:
    ',arr2
    print 'arr3:
    ',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:
    ',arr1
    print 'arr2:
    ',arr2
    print 'arr3:
    ',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

     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    P1843 奶牛晒衣服
    P1577 切绳子
    P2777 [AHOI2016初中组]自行车比赛——洛谷
    选择我自己的算法 2012年CCC加拿大高中生信息学奥赛
    如何修改博客园里个人首页背景(form:cot 大犇)
    洛谷P1105 平台
    SPFA模板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板
    洛谷p2504 HAOI2006 聪明的猴子
    舒适的路线
    超级质数
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13773546.html
Copyright © 2011-2022 走看看