使用Python列表实现向量运算

在Python中,列表支持与整数的乘法运算,但表示的是列表元素的重复,并生成新列表,如:

>>> [1,2,3]*3

[1, 2, 3, 1, 2, 3, 1, 2, 3] Python列表不支持与整数的加、减、除运算,也不支持列表之间的减、乘、除操作,而加法运算则表示列表元素的合并,并生成新列表,如:

>>> [1,2,3]+[4,5,6]

[1, 2, 3, 4, 5, 6]

对于向量而言,经常需要这样的操作,例如向量所有分量同时加、减、乘、除同一个数,或者向量之间的加、减、乘、除运算,Python列表不支持这样的操作,但可以借助于内置函数或运算符模块来实现,如:

>>> import random

>>> x = [random.randint(1,100) for i in range(10)] #生成10个介于[1,100]之间的随机数

>>> x

[46, 76, 47, 28, 5, 15, 57, 29, 9, 40]

>>> x = list(map(lambda i: i+5, x)) #所有元素同时加5

>>> x

[51, 81, 52, 33, 10, 20, 62, 34, 14, 45]

>>> x = list(map(lambda i: i//5, x)) #所有元素同时对5求整商

>>> x

[10, 16, 10, 6, 2, 4, 12, 6, 2, 9]

>>> x = [random.randint(1,10) for i in range(10)]

>>> x

[2, 2, 9, 6, 7, 9, 2, 1, 2, 7]

>>> y = [random.randint(1,10) for i in range(10)]

>>> y

[8, 1, 9, 7, 1, 5, 8, 4, 1, 9]

>>> import operator

>>> z = sum(map(operator.mul, x, y)) #向量内积

>>> z

278

>>> list(map(operator.add, x, y)) #向量对应元素相加

[10, 3, 18, 13, 8, 14, 10, 5, 3, 16]

>>> list(map(operator.sub, x, y))

[-6, 1, 0, -1, 6, 4, -6, -3, 1, -2]

>>> x = [random.randint(1,10) for i in range(5)]

>>> x

[1, 7, 9, 10, 2]

>>> list(map(operator.add, x, [3 for i in range(len(x))])) #向量所有元素同时加3

[4, 10, 12, 13, 5]

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LintCode 搜索旋转排序数组题目分析代码

假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值...

1062
来自专栏章鱼的慢慢技术路

求 pi 的近似值题型汇总

2267
来自专栏小樱的经验随笔

平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。

题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。 源码如下: 1 #include <iostream> 2 #include ...

2634
来自专栏企鹅号快讯

Python排序(一)

“为了学习Python编程,通过Python编写了一些算法小程序,作为自己的学习笔记,同时分享给大家共同学习交流!” 现在计算机的广泛使用使得数据无处不在, 而...

2005
来自专栏尾尾部落

[剑指offer] 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相...

962
来自专栏数据结构与算法

P3391 【模板】文艺平衡树(Splay)

题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区...

4137
来自专栏猿人谷

memmove函数

写一个函数,完成内存之间的拷贝 void* mymemcpy( void *dest, const void *src, size_t count )   { ...

20310
来自专栏bboysoul

1493: C语言实验题――圆柱体计算

描述:已知圆柱体的底面半径r和高h,计算圆柱体底面周长和面积、圆柱体侧面积以及圆柱体体积。 输入:输入数据有一行,包括2个正实数r和h,以空格分隔。 输出:...

791
来自专栏决胜机器学习

PHP数据结构(六) ——数组的相乘、广义表

PHP数据结构(六)——数组的相乘、广义表 (原创内容,转载请注明来源,谢谢) 本文接PHP数据结构(五)的内容。 4.2 行逻辑链接的顺序表 行逻辑链接的顺...

4429
来自专栏Python小屋

奇怪,有的Python函数或方法调用需要两对括号?

本文源自于一位读者的问题:为啥有的函数或方法调用要使用两对括号呢? 但是在我的印象里并没有这种用法啊。于是我简单扫了一眼代码,发现这位朋友说的并不是函数调用需要...

3015

扫码关注云+社区

领取腾讯云代金券