关于NumPy中asarray的用法及说明

2022-07-25 10:45:26
目录
NumPy中asarray的用法函数说明输入参数返回值实例numpy中array,asarray和asanyarray区别先讨论默认情况下array、asarray,asanyarray的区别还受到两个参数控制下面举几个详细的例子

NumPy中asarray的用法

函数说明

asarray(a, dtype=None, order=None)

转换输入为数组 array

输入参数

    a:类数组。输入数据,可以是转换为数组的任意形式。比如列表、元组列表、元组、元组元组、列表元组和>dtype:数据类型,可选。默认情况下,该参数与数据数据类型相同。order:{'C','F'},可选。选择是行优先(C-style)或列优先(Fortran-style)存储。默认为行优先。

    返回值

      out:ndarray。‘a’>

      实例

      将列表转换为数组

      >>> a = [1, 2]
      >>> np.asarray(a)
      array([1, 2])

      存在的数组不会被复制

      >>> a = np.array([1, 2])
      >>> np.asarray(a) is a
      True

      如果 “dtype” 参数存在,只有当 dtype 不匹配的时候数组才被匹配。 

      >>> a = np.array([1, 2], dtype=np.float32)
      >>> np.asarray(a, dtype=np.float32) is a
      True
      >>> np.asarray(a, dtype=np.float64) is a
      False

      与 “asanyarray” 不同,ndarray 子类不被转换

      >>> issubclass(np.recarray, np.ndarray)
      True
      >>> a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
      >>> np.asarray(a) is a
      False
      >>> np.asanyarray(a) is a
      True

      numpy中array,asarray和asanyarray区别

      先讨论默认情况下

      1、array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。

      也就是说当数据=是ndarray时,a>

      2、asarray和asanyarray的区别,np.asanyarray 会返回 ndarray 或者ndarray的子类,而np.asarray 只返回 ndarray. 也就是说对于ndarray的子类,asanyarray是不会复制的。

      array、asarray,asanyarray的区别还受到两个参数控制

      即copy和subok,下面具体举例

      而array默认设置copy=True

      假设a是一个数组,m是一个矩阵,它们的数据类型都是float32:

        np.array(a)和np.array(m)都将复制,因为这是默认行为。np.array(a,copy=False)和np.array(m,copy=False)将复制m而不是a,因为m不是ndarray。np.array(a,copy=False,subok=True)和np.array(m,copy=False,subok=True)都不会复制,因为m是矩阵,它是ndarray的子类。由于数据类型不兼容,数组(a,dtype=int,copy=False,subok=True)将同时复制两者。asanyarray:如果输入是兼容的ndarray或类似matrix的子类(copy=False,subok=True),则将返回未复制的输入。

        下面举几个详细的例子

        array和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没有区别,都对元数据进行了复制并转化为ndarray。

        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.]]

        结论:当数据源是ndarray时,array会copy出一个副本,占用新的内存,但asarray不会。

        asarray和asanyarray的区别例子

        issubclass(np.matrix, np.ndarray)
        True
        a = np.matrix([[1, 2]])
        np.asarray(a) is a#返回的不是子类。
        False
        np.asanyarray(a) is a#np.asanyarray(a)返回是a的子类
        True

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。