【问题标题】:How to multiply individual elements of a list with a number?如何将列表的单个元素与数字相乘?
【发布时间】:2012-01-01 22:58:19
【问题描述】:
S = [22, 33, 45.6, 21.6, 51.8]
P = 2.45

这里S是一个数组

我将如何乘以它并获得价值?

SP = [53.9, 80.85, 111.72, 52.92, 126.91]

【问题讨论】:

  • 在 Python S 中不是一个数组,它是一个列表。这两种容器之间有很大的区别。如果你想要数值数组,请使用 numpy。

标签: python numpy multiplication


【解决方案1】:

在 NumPy 中非常简单

import numpy as np
P=2.45
S=[22, 33, 45.6, 21.6, 51.8]
SP = P*np.array(S)

我建议查看 NumPy 教程,了解 NumPy 数组的全部功能:

https://scipy.github.io/old-wiki/pages/Tentative_NumPy_Tutorial

【讨论】:

    【解决方案2】:

    你可以使用内置的map函数:

    result = map(lambda x: x * P, S)
    

    list comprehensions 更Pythonic:

    result = [x * P for x in S]
    

    【讨论】:

    • 请注意,数组上的操作(如标量乘法)在 numpy 中得到了高度优化,并且比列表解析要快得多。通常建议不要将 numpy 数组视为 python 列表。
    • "一般建议不要像 python 列表那样处理 numpy 数组",这通常是什么意思?它与不使用 NumPy 的当前答案有什么关系?这个答案在 2021 年仍然正确吗(可能但仍不确定,也许一些新的运算符似乎表明我们真的想要分布式操作而不是列表复制)?
    【解决方案3】:

    如果你使用numpy.multiply

    S = [22, 33, 45.6, 21.6, 51.8]
    P = 2.45
    multiply(S, P)
    

    结果给你

    array([53.9 , 80.85, 111.72, 52.92, 126.91])
    

    【讨论】:

      【解决方案4】:

      这是使用mapitertools.repeatoperator.mulfunctional 方法:

      import operator
      from itertools import repeat
      
      
      def scalar_multiplication(vector, scalar):
          yield from map(operator.mul, vector, repeat(scalar))
      

      使用示例:

      >>> v = [1, 2, 3, 4]
      >>> c = 3
      >>> list(scalar_multiplication(v, c))
      [3, 6, 9, 12]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多