首页 > 解决方案 > 为什么 Python 对于“sum”或“and”等相同函数的行为会有所不同?

问题描述

**

** 我发现在 numpy 中处理二维数组时,我意识到求和有不同的选项 - 即 Python 内置方法sum仅提供沿轴的求和,而 numpysum提供总二维数组(矩阵)的求和。

**

**

我注意到逻辑和 ( and) 按位和 ( &) 都适用于相同的数据元素,但会产生不同的结果。事实上,Logical and and不能在其中工作seriesdataframe而按位 and&工作得很好。

为什么会这样?任何人都可以根据语言的历史、设计、目的等提供见解,以便更好地理解吗?

问候 SSP

标签: pythonnumpynumpy-ndarray

解决方案


numpy在 Python 中运行,并从ndarray类方法和模块函数中获取其所有特殊行为。它不会改变 Python 语法。

Pythonsum将其输入视为可迭代;一维数组很容易理解,就像在列表上操作一样。但是在二维数组上,就更难理解了:

In [52]: x = np.arange(12).reshape(3,4)                                         
In [53]: sum(x)                                                                 
Out[53]: array([12, 15, 18, 21])    # what's this doing?
In [54]: x.sum()        # or np.sum(x)                                                            
Out[54]: 66
In [55]: x.sum(axis=0)                                                          
Out[55]: array([12, 15, 18, 21])    # sum down rows, one per column
In [56]: x.sum(axis=1)                                                          
Out[56]: array([ 6, 22, 38])        # sum across columns, one per row

Pythonand是一个短路运算符。与if语句一样,它与 numpy 数组一起使用可能会产生ambiguity错误。数组的比较产生布尔数组。布尔数组不能在需要标量布尔值的 Python 上下文中使用。

+, *,等运算符&具有特定于类的含义/方法。[1,2,3]*3不同于np.array([1,2,3])*3. "a"+"string"不同于np.arange(3)+3.


推荐阅读