python - 为什么我不能在 numpy 中使用 x.unique(),但是 x.sum() 或 x.mean() 可以工作?

标签 python numpy

我正在学习 numpy,但是,我不明白,例如:

import numpy as np
ints = np.array([3,3,3,2,2,1,1,4,4])

ints.unique() # this won't work
np.unique(ints) # this works

但是,有些功能是双向的

ints.sum()
np.sum(ints)

我正在阅读 numpy 文档,属性方法 之间有什么不同? arributes 将返回一些内容以及 methods

最佳答案

uniquesum 不同,是一个自由函数 ,而不是一个类(准确地说是实例)<强>方法。两者的区别是

obj.foo()   # instance method, obj is implicitly passed to foo()
foo(obj)    # free function,   obj is explicity passed to foo()

看看here有关方法的不同变体的一些解释。我认为,在 NumPy 中,这主要是一个设计决定,但是某些函数成为自由函数是有一定原因的。我想到的一个原因是,与其他技术语言(例如 MATLAB)不同,numpy 数组可以是结构化的或非结构化的,并且可以灵活地包含不同类型的对象,例如

a = np.array([[1,2],[3,4]])        # structured array
b = np.array([[1,2],[3,4,5]])      # unstructured array
c = np.array([[1,2],["abc",True]]) # unstructured array with flexible data type

在这种情况下,必须使每个函数/方法都成为实例方法,会导致令人困惑的行为。即使 sum 函数对于结构化和非结构化数组的行为也有所不同

In [18]: a.sum() # sums all elements of the array
Out[18]: 10
In [19]: b.sum() # concatenates all elements of the array
Out[19]: [1, 2, 3, 4, 5]

相比之下,一些函数(例如unique)的应用范围要窄得多。例如,unique 仅适用于统一数据类型的结构化数组/缓冲区,并对数组的扁平(一维)版本进行操作。

numpy 数组的

属性通常会告诉您数组的底层数据类型、形状、维数、内存布局/步长和数据所有权,例如:

In [20]: a=np.random.rand(3,4)
In [21]: a.flags
Out[21]: 
    C_CONTIGUOUS : True
    F_CONTIGUOUS : False
    OWNDATA : True
    WRITEABLE : True
    ALIGNED : True
    UPDATEIFCOPY : False

In [22]: a.shape
Out[22]: (3, 4)

In [23]: a.dtype
Out[23]: dtype('float64')

都是属性,而不是数组方法,换句话说,它们是属性。

关于python - 为什么我不能在 numpy 中使用 x.unique(),但是 x.sum() 或 x.mean() 可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092793/

相关文章:

javascript - Odoo 搜索多个名称使用 OR 运算符

python - 归一化:numpy 数组与一个点之间的欧几里德距离

python - Theano 中的余弦相似度

python - 在 python 中求解线性方程 XA = B

python - django.test.client 在现有 url 上出现 404 错误

python - 在 Ubuntu Python 3 上构建的 Cython+distutils 在链接期间更改了模块库名称

python - 如何在不生成 PyLint 警告的情况下比较两个变量的类型?

python - 我怎样才能保存这个 matplotlib 图,这样 x 轴标签就不会被裁剪掉?

python - 从第 k 个最后一个元素到第 k 个第一个元素的 numpy 索引

python - 我如何计算不同 2D 向量行之间的 L2 或欧几里德距离