python - 为什么 Python 对于“sum”或“and”等相同函数的行为会有所不同?
问题描述
**
- 场景一:
sum
** 我发现在 numpy 中处理二维数组时,我意识到求和有不同的选项 - 即 Python 内置方法sum
仅提供沿轴的求和,而 numpysum
提供总二维数组(矩阵)的求和。
**
- 场景 2:
and
对&
**
我注意到逻辑和 ( and
) 按位和 ( &
) 都适用于相同的数据元素,但会产生不同的结果。事实上,Logical and and
不能在其中工作series
,dataframe
而按位 and&
工作得很好。
为什么会这样?任何人都可以根据语言的历史、设计、目的等提供见解,以便更好地理解吗?
问候 SSP
解决方案
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
.
推荐阅读
- leaflet - 如何设置 Openstreetmap 的样式?
- python-3.x - 将代码从 FOR 循环转换为 WHILE 循环
- python - 递归返回变量值
- google-cloud-platform - Shelly 设备和安全 MQTT 连接
- laravel - 如何在 Vue 支持的 SPA 中使用 Jetstream 身份验证而不使用惯性和 laravel 路由器?
- javascript - 使用 Google App Script 突出显示特定列中的最大值
- sql - 似乎无法将对象保存到数据库中
- git - 语义发布无法增加版本
- function - 如何提高 MATLAB 中的 gather() 函数的速度,或者这是将数据从 gpuArray 传输到通用数组的另一种方法?
- javascript - TypeError: data.Order.map 不是函数( react 和 graphql )