前言

本文记录了我在python编程中遇到的各种小问题,持续更新。

1. x = x + 1 VS x += 1

辨析下面这两段代码:

>>> x = y = [1, 2, 3, 4]
>>> x += [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4, 4]
>>> x = y = [1, 2, 3, 4]
>>> x = x + [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4]

1)’+=’ 调用 in-place 的加法,即 iadd 方法。 此方法采用两个参数,但是原地进行更改,修改了第一个参数的内容(即x被修改)。 由于x和y都指向相同的Pyobject,因此它们都是相同的。

2)x = x + [4] 调用 add 方法,相当于 x.add([4]),并没有原地进行更改或添加值,它会创建一个新列表[1, 2, 3, 4, 4],该列表指向了x,而y仍指向旧列表[1, 2, 3, 4],因此它们不相同。

2. np.matmul(@) VS np.dot VS np.multiply(*)

np.matmul(a, b)是矩阵乘法,运算符重载为@;np.dot(a, b)是点积;np.multiply(a, b)是逐元素乘法,运算符重载为*

关于三者的辨析,直接上结论:

1)如果a或者b有一个是标量,用np.multiply()或者*,np.dot()可以但不推荐,np.matmul()不可以;

2)如果a、b是向量,则使用np.dot()向量内积;

3)如果a、b是二维array(矩阵),则使用np.matmul()矩阵乘法;

4)a、b是二维及以下array的情况下,np.matmul()与np.dot()效果相同;

5)a、b是大于二维array的情况下,如下例:

a = np.array([i for i in range(120)]).reshape([2,3,4,5])
b = np.array([i for i in range(120)]).reshape([2,3,5,4])
>>> np.matmul(a,b).shape
(2, 3, 4, 4)>>> np.dot(a,b).shape
(2, 3, 4, 2, 3, 4)>>> np.matmul(b,a).shape
(2, 3, 5, 5)>>> np.dot(a,b).shape
(2, 3, 5, 2, 3, 5)

重点是观察结果的维度不同,np.matmul(a,b)的维度为(2, 3, 4, 4),np.dot(a,b)的维度为(2, 3, 4, 2, 3, 4),这是因为np.matmul()遵循了矩阵乘法的维度规则(n,k),(k,m)->(n,m),a的最后一个维度5和b的倒数第二个维度5消掉。

具体的运算,用一个简单点的例子说明:

a = np.array([i for i in range(12)]).reshape([2,2,3])
b = np.array([i for i in range(12)]).reshape([2,3,2])
"""
a
[[[ 0  1  2][ 3  4  5]][[ 6  7  8][ 9 10 11]]]
b
[[[ 0  1][ 2  3][ 4  5]][[ 6  7][ 8  9][10 11]]]
""">>> np.matmul(a,b)
array([[[ 10,  13],[ 28,  40]],[[172, 193],[244, 274]]])>>> np.dot(a,b)
array([[[[ 10,  13],[ 28,  31]],[[ 28,  40],[100, 112]]],[[[ 46,  67],[172, 193]],[[ 64,  94],[244, 274]]]])

3. “==” VS “is”

在python中,双等号 ==is 好像都是用于判断两个东西是否相等,但实际上两者是不一样的。

== 是用于判断值(value)相等,即判断两个对象是否具有相同的值。

is 是用于判断参考(reference)相等,即判断两个引用是否引用同一个对象。

实际上,以下两条语句是等价的:

a is b
id(a) == id(b)

id() 函数可以理解为一种哈希函数,用来唯一标识python中的不可变类型。

python编程中的小问题汇总相关推荐

  1. Python 编程中常用的12种基础知识总结

    Python 编程中常用的12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出 ...

  2. python random模块中的指令_10分钟让你掌握python编程中random模块功能使用,非常详细...

    原标题:10分钟让你掌握python编程中random模块功能使用,非常详细 python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可 ...

  3. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  4. python编程中的运算_Python编程中的四大运算法则

    接触过编程的人都知道,编程中的数学知识无处不在,通过数学建模能够解决我们实际生活中的很多问题.当然这并不是说必须要成为一名数学大神才能学编程,但掌握数学知识在编程中的表达方法却是很有必要的,今天南京小 ...

  5. if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

    来源:菜鸟分析 链接: https://zhuanlan.zhihu.com/p/34112508 一天偶然发现知乎上有篇关于对python编程中的if __name__ == 'main'的理解陈述 ...

  6. python编程基础知识点总结_【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  7. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  8. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识

    Python编程中常用的12种基础知识,其中肯定有你不会的! 人生苦短,我用Python 1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串. 人生苦短,我用 ...

  9. Python编程中一定要注意的那些“坑”(二)

    之前发过一些坑,请参考Python编程中一定要注意的那些"坑"(一)和Python函数默认值参数的2个坑 今天说说列表的内存自动伸缩带来的坑. 假设有个列表如下,现在下删除其中的所 ...

最新文章

  1. 详解分布式系统与消息投递
  2. 【百度地图API】如何区分地址解析和智能搜索?
  3. 剑指offer python版 找出数组中重复的数字
  4. [MyBatisPlus]MyBatisX插件
  5. python进阶项目设计_Python进阶循环设计
  6. java 两个线程同步_Java 多线程(二)—— 线程的同步
  7. 单节点Rancher 2.5.1 证书过期报错 x509: certificate has expired or is not yet valid 解决方案
  8. mysql 安装服务 w_MySQL的安装与配置
  9. B站、字节跳动等上榜2021福布斯中国最佳雇主榜;中兴发布“5G 智能T恤”:可监测呼吸;Linux 5.13 发布|极客头条...
  10. [...]ubuntu rvm rails 安装完之后消失的解决方法
  11. Sync Framework 词汇表
  12. delphi启动ie调用本地html传参数_年轻人不讲武德啊!了解下浏览器如何解析html、css,js
  13. Origin修改安装位数
  14. python实现isprime函数_Python实现isPrime函数
  15. 嵌入式软件测试环境搭建,基于DOORS的嵌入式软件测试环境需求管理
  16. python实现百度语音合成(超详细!!)
  17. CCF题目:相邻数对
  18. 32位系统无法运行64位系统安装文件
  19. Mac Pro硬盘清理,为啥我的系统占用如此之多的磁盘空间
  20. Coursera半价优惠

热门文章

  1. PHP URL的处理函数,php中url处理函数总结
  2. 定量遥感:计算地方时和太阳高度角(C++代码)
  3. 利用Erdas监督分类方法提取城镇用地信息完整实验操作步骤
  4. SQL日期时间格式自由转换大全
  5. SQL Server 编写自动增长的字符串型主键
  6. C++之typename
  7. Linux之dd命令详解
  8. python查看图片的源代码_python实现图片筛选程序
  9. 多智能体连续行为空间问题求解——MADDPG
  10. opencv 平面法向量_在OpenCV中绘制平面的法向量