【问题标题】:Calculate addition, multiplication and dot product of two vectors计算两个向量的加法、乘法和点积
【发布时间】:2021-08-11 03:53:17
【问题描述】:

我已经开始了数据科学课程,第一个作业中的一个问题是编写一个函数,该函数返回两个向量的加法、乘法和点积,格式如下:

def list_mul(u, v):
    """
    Given two vectors, calculate and return the following quantities:
    - element-wise sum
    - element-wise product
    - dot product

    If the two vectors have different dimensions,
    you should raise a ValueError

    :param u: first vector (list)
    :param v: second vector (list)
    :return: the three quantities above
    :rtype: list, list, float
    :raise ValueError:
    """

如果我可以使用 numpy,我会发现这真的很容易,但要求是仅使用 vanilla python 编写函数 - 我们可以使用 import math 之类的东西,但不能使用自定义包。

如果有人能够提供帮助或提供一些建议,我将不胜感激?

非常感谢,

安德鲁

【问题讨论】:

  • 导入算子后:sum = map(operator.add, u, v) product = map(operator.mul, u, v) dot_product = sum(map(operator.mul, u, v) )

标签: python vector


【解决方案1】:

我不想给出解决方案,但我会给出一些建议。我认为使用list comprehensions 可以为所有 3 个操作提供一个相当简洁的解决方案。

列表推导式提供了一种创建列表的简洁方式。常见的应用是创建新列表,其中每个元素是应用于另一个序列或可迭代的每个成员的某些操作的结果,或者创建满足特定条件的那些元素的子序列。

zip()

创建一个迭代器,聚合来自每个可迭代对象的元素。

祝你好运!

【讨论】:

  • 非常感谢,我会去回复你的!
【解决方案2】:

感谢 L. Suurmeijer 对这个问题的建议。我最终使用 zip() 函数运行以下解决方案

if len(v)!=len(u):
        raise ValueError('inconsistent dimension')
    
    vec_sum=[x+y for x,y in zip(u,v)]
    
    vec_prod = [x * y for x, y in zip(u, v)]
    
    dot_prod=sum(x*y for x,y in zip(u,v))
    
    return vec_sum, vec_prod, dot_prod

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 2016-10-12
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2012-10-30
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多