为什么Python对于相同的功能(例如“ sum”或“ and”)的行为有所不同?

时间:2019-12-15 14:22:38

标签: python numpy numpy-ndarray

**

  • 场景1:sum

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

**

  • 场景2:and&

**

我注意到逻辑和(and)的位和(&)都在同一个数据元素上工作,但产生不同的结果。实际上,逻辑和andseries的{​​{1}}中不起作用,而按位和dataframe则可以正常工作。

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

问候 Ssp

2 个答案:

答案 0 :(得分:1)

这是它的设计方式。 nparray属于numpy,具有自然的总和,可以总结整个结构。但是Python中没有一个功能可以递归执行。

答案 1 :(得分:0)

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

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

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

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