Python中两个向量的乘法
这在Fortran、Basic甚至Matlab中都是微不足道的,但我无法让它在Python+Numpy中工作。我尝试过许多建议和示例,但它们太简单,不适合这个问题。伪代码如下所示: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
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问题是什么。这可能是一个简单的操作,比如正确初始化数组,或者为表达式编写。那一些复杂的数学
也是一个很大的未知数。它可以处理数组,还是只处理标量。