python编程中的小问题汇总

前言

本文记录了我在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中的不可变类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

都在讨论高并发,结果连并发量、TPS、QPS都分不清

“ 年年岁岁跳槽季,回回必问高并发!原因很简单,因为高并发能牵扯出太多问题,接口响应超时、CPU负载升高、GC频繁、死锁、大数据量存储等,能考察求职者的真实情况。而很多人在第一步就倒下了!因为对数据化的…

leetcode518. 零钱兑换 II

一:题目 二:上码 class Solution { public:/**思路:1.分析题意这个满足答案的结果有很多种,所以我们可以用动态规划去做,那么题意中我们可以知道的是我们是可以输入一种面值的时候,我们是可以重复输入的,那么这就是背包类型中的完全背包了2.动态规划5步…

跟我一起学.NetCore之选项(Options)核心类型简介

前言.NetCore中提供的选项框架,我把其理解为配置组,主要是将服务中可供配置的项提取出来,封装成一个类型;从而服务可根据应用场景进行相关配置项的设置来满足需求,其中使用了依赖注入的形式,使得更加简单、…

《ASP.NET Core项目开发实战入门》送书活动结果公布

截至2020.09.20 本次送书活动《ASP.NET Core项目开发实战入门》。下面把Top 5的留言截图给大家回顾一下。以下5位同学将获赠书籍一本:小林子鉴静红脸先生阿星Plus以上同学请在2020年9月25日24:00之前加小二微信领取赠书,超过时间视为放弃。小…

二分查找基础概念与经典题目(Leetcode题解-Python语言)二分索引型

二分查找的定义如下(引自Wiki): 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm&…

Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库

在2.3这一版本的更新中,我们迎来了众多的使用者、贡献者,在这个里程碑中我们也添加并修复了一些功能。对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提issues或者PR&#xff0c…

听说用 C# 写 TensorFlow 更高效?

经过半年呕心沥血的努力,SciSharp STACK终于把Tensorflow .NET绑定升级到可以使用 tensorflow 2.3, 新版本最大的优势是实现了Eager模式, 这个特性是让.NET C#/ F#成为机器学习模型开发工具的重要前置条件。NugGet包下载:https://www.nuget.org/packages/TensorFlow…

leetcode279. 完全平方数

一:题目 二:上码 class Solution { public:/**思路:1.分析题意这个就是将一个数分成几个数的和;然而的话,这几个数必须的是完全平方数,我们要求的是最少数量的完全平方数这个满足答案的有好几个;但是我们要求的是最少的数量2.动态规划五步走1>:确定dp数组的含义以及下标的含…

跟我一起学.NetCore之Options实例演示及分析

前言来啦!来啦!上一节一堆代码,是不是感觉甚是无味啊?没关系,这里结合上一节内容专注举例演示,绝不废话!走起~~~~~正文老规矩,一个WebApi项目走起,项目结构如下&#xff…

leetcode139. 单词拆分

一:题目 二:上码 class Solution { public:/**思路:1.分析题意单词就是物品;字符串就是背包;单词能否组成字符串就是在问,物品能不能将背包装满单词可以重复使用那么说明这是一个完全背包2.动态规划五步走1>:确定dp数组的与下标的含义(这里用下标i是由我们的遍历…

大数据下的质量体系建设

一、背景大数据、人工智能是当前也是未来几年IT部门的重点建设方向,新的技术可以为业务突破盈利瓶颈,带来新的增长点,同时我们也发现数据中台也频频在最近的企业财报予以体现,相关的技术岗位需求也是供不应求,与之形成…

Pandas中的 transform() 结合 groupby() 用法示例

首先,假设我们有如下餐厅数据集: import pandas as pddf pd.DataFrame({restaurant_id: [101,102,103,104,105,106,107],address: [A,B,C,D, E, F, G],city: [London,London,London,Oxford,Oxford, Durham, Durham],sales: [10,500,48,12,21,22,14] })…

跟我一起学.NetCore之日志(Log)模型核心

前言鲁迅都说:没有日志的系统不能上线(鲁迅说:这句我没说过,但是在理)!日志对于一个系统而言,特别重要,不管是用于事务审计,还是用于系统排错,还是用于安全追踪.....都扮演了很重要的…

Numpy中数组创建函数的辨析

首先推荐Numpy官方的教程,网址。 很多人会对数组创建函数的参数中什么时候要用括号np.zeros((2, 3)),什么时候不用括号np.eye(3, 5)感到疑惑,这里对它们统一进行梳理。(按照官方文档的分类方法) 1. 一维数组创建函数…

leetcode213. 打家劫舍 II

一:题目 二:上码 class Solution { public:/**思路:1.既然成环了,我们如果选取得一条偷取路径是从头开始得那么我们就不能偷取最后一个,那就不算最后一个偷取一遍2.同理我们也可以不算第一个 偷取一遍计算一次偷取得结果*/int rob(vector<int>& nums) {if(nums.size…

一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题

Numpy库的核心是ndarray&#xff0c;实际上就是N维数组&#xff08;N-dimensional array&#xff09;&#xff0c;关于这个数据对象的详细介绍&#xff0c;参考官方文档最为合适。有一点要注意的是&#xff0c;ndarray的内置方法只有30多个&#xff0c;常用的如求平均值可以写a…

leetcode337. 打家劫舍 III

一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*…

asp.net core 从 3.1 到 5.0

asp.net core 从 3.1 到 5.0Intro就在前几天&#xff0c;微软宣布了 .NET5 发布了 RC1 版本&#xff0c;这也意味着 .NET5 的开发基本稳定了&#xff0c;正式发布之前&#xff0c;不会再新增新的 Feature&#xff0c;只会专注于修复 BUG 提高稳定性。对于开发者来说&#xff0c…

leetcoed123. 买卖股票的最佳时机 III

一&#xff1a;题目 二:上码 class Solution { public:/**思路:1.动态规划五步走1>:确定dp数组以及下标的含义因为题目给出至多完成两笔交易 那么我们一天的状态就有5种0 无操作1 第一次买入2 第一次卖出3 第二次买入4 第二次卖出dp[i][j] 表示的是在第i天 [0,4] 其中某个…

送福利 | 送书3本 ASP.NET Core 真机拆解

小编&#xff1a;最近.NET相关图书在多年沉寂后重新恢复&#xff0c;本书作者提供3本送给公众号粉丝&#xff0c;所以参与方式&#xff1a;文章下方留言&#xff0c;你可以聊聊.NET Core 这几年的发展给你的印象&#xff0c;你的感想&#xff0c;点赞最多的前5位获奖。活动截止…