NumPy: From existing data

np.array v.s. np.asarray

  • 二者接口
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

由上,知np.asarray是通过np.array实现的,但两者的copy默认值不同了。

  • 测试
In [1]: a
Out[1]: array([1, 2, 3])

In [2]: np.array(a)
Out[2]: array([1, 2, 3])

In [3]: np.asarray(a)
Out[3]: array([1, 2, 3])

In [4]: np.array(a) is a
Out[4]: False

In [5]: np.asarray(a) is a
Out[5]: True

=================================

In [6]: np.array(a)[1] = 10

In [7]: a
Out[7]: array([1, 2, 3])

In [8]: np.asarray(a)[1] = 10

In [9]: a
Out[9]: array([ 1, 10,  3])

可见,np.array(a)创建了一个a的副本,但np.asarray(a)却没有。

np.asarray v.s. np.asanyarray

  • 定义
def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)
def asanyarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order, subok=True)

可见,二者的区别就是subok这参数项。在np.asarray中使用的是np.array中默认的,即subok=False;而np.asanyarray中的是subok=True

subok : bool, optional
If True, then sub-classes will be passed-through, otherwise the returned array will be forced to be a base-class array (default).
  • 测试
In [1]: a = np.matrix([1,2])

In [2]: a
Out[2]: matrix([[1, 2]])

In [3]: np.asarray(a) is a
Out[3]: False

In [4]: np.asanyarray(a) is a
Out[4]: True

======================================

In [5]: b = np.asarray(a)

In [6]: b
Out[6]: array([[1, 2]])

In [7]: c = np.asanyarray(a)

In [8]: c
Out[8]: matrix([[1, 2]])

matrixnarray的一个子类。如文档所说的,

 If a is a subclass of ndarray, a base class ndarray is returned.

对于np.asarray,返回的是一个基类,即narray,而不是matrix

Convert the input to an ndarray, but pass ndarray subclasses through.
If a is an ndarray or a subclass of ndarray, it is returned as-is and no copy is performed.

故对于np.asanyarray返回的仍是matrix类型的。

np.copy

  • define
def copy(a, order='K'):
    return array(a, order=order, copy=True)
np.copy(a)  is equivalent to np.array(a, copy=True)
  • test
In [1]: a = np.array([1, 1, 1])

In [2]: b = a

In [3]: c = a.copy()

==================================================

In [6]: c[1] = 3

In [7]: c
Out[7]: array([1, 3, 1])

In [8]: a
Out[8]: array([1, 1, 1])

In [9]: b[1] = 3

In [10]: a
Out[10]: array([1, 3, 1])

==================================================

In [12]: a is b
Out[12]: True

In [13]: a is c
Out[13]: False

np.asmatrix

  • define
def asmatrix(data, dtype=None):
    return matrix(data, dtype=dtype, copy=False)
  • test
In [14]: a = np.array([1, 1, 1])

In [16]: b = np.asmatrix(a)

In [17]: b
Out[17]: matrix([[1, 1, 1]])

In [18]: a[1] = 2

In [19]: b
Out[19]: matrix([[1, 2, 1]])

In [20]: a is b
Out[20]: False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 最近在写个性化推荐的论文,经常用到Python来处理数据,被pandas和numpy中的数据选取和索引问题绕的比较...
    shuhanrainbow阅读 10,045评论 6 19
  • import numpy as np 创建ndarray data1 = [6,7.5, 8, 0, 1]arr1...
    陆文斌阅读 4,066评论 0 1
  • 因为讲了我的转行经历,就有人邀请我回答相关的问题。无外乎就是:我大学是xxxx专业,各种原因,想换一个,但xxxx...
    自由飞阅读 1,706评论 0 2
  • 张曼玉在2004年获得57届戛纳电影节最佳女演员奖,电影名字就叫《清洁》,印象深刻。 但电影与这篇文字却无太大关系...
    怡然之鱼阅读 1,441评论 0 0

友情链接更多精彩内容