为什么Python对同一个函数(如';总和';或';和';?

为什么Python对同一个函数(如';总和';或';和';?,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,** 情景1:sum ** 我发现在numpy中处理2d数组时,我意识到求和有不同的选项,即Python内置方法sum仅提供沿轴的求和,而numpysum提供整个2d数组(矩阵)的求和 ** 情景2:和与和 ** 我注意到逻辑and(和)按位and(&)都在同一个数据元素上工作,但产生不同的结果。事实上,逻辑and和和在数据帧的系列中不起作用,而按位and和和工作正常 为什么会发生这种情况?有人能根据语言的历史、设计、用途等提供见解,以便更好地理解吗 问候 Sspnumpy在Python

**

  • 情景1:
    sum
** 我发现在numpy中处理2d数组时,我意识到求和有不同的选项,即Python内置方法
sum
仅提供沿轴的求和,而numpy
sum
提供整个2d数组(矩阵)的求和

**

  • 情景2:
**

我注意到逻辑and(
)按位and(
&
)都在同一个数据元素上工作,但产生不同的结果。事实上,逻辑and和
数据帧的
系列
中不起作用,而按位and和
工作正常

为什么会发生这种情况?有人能根据语言的历史、设计、用途等提供见解,以便更好地理解吗

问候
Ssp

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

Python
sum
将其输入视为一个iterable;使用一维数组很容易理解,就像在列表上操作一样。但在2d阵列上,更难理解:

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
Python
是一个短路运算符。与
if
语句类似,它与numpy数组一起使用可能会产生
歧义
错误。数组的比较产生布尔数组。布尔数组不能在需要标量布尔值的Python上下文中使用


+
*
&
这样的运算符具有特定于类的含义/方法
[1,2,3]*3
不同于
np.array([1,2,3])*3
“字符串”
不同于np.arange(3)+3

只接受左操作数的真实性。如果该真实性为
False
则“返回”第一个操作数,否则返回正确的操作数。但并非所有对象都具有真实性。关于
sum
,该函数只是对给定参数中的元素求和。数组一次迭代一行,因此
sum(a)
是在添加行,而不是数组的元素。这基本上是一种设计折衷:一个类型只能有一种迭代器,对于数组迭代器来说,生成行而不是单个元素可能更有用或更合乎逻辑。另外一个
sum
方法可以自由定义,但是很有用。谢谢。为什么不通过答案提供这些信息,这样你们就可以获得学分?