Python中两个向量的乘法

Python中两个向量的乘法,python,loops,numpy,Python,Loops,Numpy,这在Fortran、Basic甚至Matlab中都是微不足道的,但我无法让它在Python+Numpy中工作。我尝试过许多建议和示例,但它们太简单,不适合这个问题。伪代码如下所示: Given a vector a(i) with 500 values. for i=1 to 500 b(i) = some complicated math c(i) = a(i) * b(i) 这将如何用Python+Numpy编写 我想试试这样的东西 import numpy as np

这在Fortran、Basic甚至Matlab中都是微不足道的,但我无法让它在Python+Numpy中工作。我尝试过许多建议和示例,但它们太简单,不适合这个问题。伪代码如下所示:

Given a vector a(i) with 500 values. 
for i=1 to 500
    b(i) = some complicated math
    c(i) = a(i) * b(i)

这将如何用Python+Numpy编写

我想试试这样的东西

import numpy as np

n = 500

# Allocate memory for a, b, c
a = np.zeros((n))
b = np.zeros((n))
c = np.zeros((n))

# Loop over element
for i in range(n):
    b[i] = some complicated math
    c[i] = a[i] * b[i]

您可以使用Numpy
multiply
获得元素向量积。试着这样做:

import numpy as np

a = np.arange(500)
b = 10 * np.arange(500) + 3 # an example of the "complex math"
c = np.multiply(a, b)
b = np.zeros_like(a)
for i, ai in enumerate(a):
    b[i] = some_complicated_math(ai)
c = a*b
b = [some_complicated_math(ai) for ai in a]
c = a*b

请注意,数学运算(
*
+
)自动应用于
b

的所有元素,这取决于“复杂数学”是否可以矢量化,以及它是一行还是几行。如果它不能矢量化并且需要几行,这是更复杂的解决方案,您可以这样做:

import numpy as np

a = np.arange(500)
b = 10 * np.arange(500) + 3 # an example of the "complex math"
c = np.multiply(a, b)
b = np.zeros_like(a)
for i, ai in enumerate(a):
    b[i] = some_complicated_math(ai)
c = a*b
b = [some_complicated_math(ai) for ai in a]
c = a*b
在本例中,
i
a
的当前索引,
ai
是该索引处的值(相当于
a[i]
)<代码>枚举为您提供一个值及其(1D)索引。numpy数组中的乘法自动按元素进行

如果“复杂数学”无法矢量化,但可以在一行上完成,则可以执行以下操作:

import numpy as np

a = np.arange(500)
b = 10 * np.arange(500) + 3 # an example of the "complex math"
c = np.multiply(a, b)
b = np.zeros_like(a)
for i, ai in enumerate(a):
    b[i] = some_complicated_math(ai)
c = a*b
b = [some_complicated_math(ai) for ai in a]
c = a*b
在本例中,
b
是一个列表(不是numpy数组),但python非常聪明,可以在幕后将
b
转换为numpy数组,因为它与numpy数组
a
相乘。如果以后需要,可以使用
np.array(b)
b
转换为numpy数组

最简单的情况是,如果“复杂的数学”可以矢量化。然后你可以做:

b = some_complicated_math(a)
c = a*b
如果出于任何原因,您需要将
b
c
放入循环中(我能想到的唯一原因是如果
b
以某种方式引用
c
),那么您可以这样做:

b = np.zeros_like(a)
c = np.zeros_like(a)
for i, ai in enumerate(a):
    b[i] = some_complicated_math(ai)
    c[i] = a[i]*b[i]

你是在找一个还是一个?。。。或者一个?@Fredrarson judjing根据提供的伪代码,它将是元素级的(
c(i)=a(i)*b(i)
)。@Uriel:我相信你是对的,这将使答案
c=numpy.multiply(a,b)
你真的应该显示一个或多个失败的
Python
尝试,也许是一个成功的MATLAB尝试。如前所述,我们不知道您的Python问题是什么。这可能是一个简单的操作,比如正确初始化数组,或者为表达式编写
。那
一些复杂的数学
也是一个很大的未知数。它可以处理数组,还是只处理标量。