numpy 如何在Python中编写高效的循环并解决错误:“ValueError:操作数不能与形状(6,)(4,)一起广播"?

3phpmpom  于 2023-06-29  发布在  Python
关注(0)|答案(2)|浏览(130)

我试图在Python中尽可能地避免循环,因为有人告诉我,当循环较少时,代码运行得更有效。出于同样的原因,我也尝试使用“zip”而不是嵌套循环来处理多个迭代器。
1.这个建议正确吗?
1.我已经尝试使用的建议,但不能过去这个错误时,试图运行下面的代码。我可能做了一些愚蠢的事情,但不能弄清楚。有人能给我指个方向吗?

ValueError: operands could not be broadcast together with shapes (6,) (4,)
import numpy as np
import itertools

# For each value in d and e, I want to loop through all a and b.

d = np.array([1, 2, 3, 4]) 
e = np.array([1000, 2000, 3000, 4000])

a = np.array([10.0e+2, 20.0e+2, 30.0e+2, 40.0e+2, 50.0e+2, 60.0e+2])
b = np.array([1.0e-1, 2.0e-1, 3.0e-1, 4.0e-1, 5.0e-1, 6.0e-1])

c = np.zeros(6)
for (j, k) in zip(d, e):
    c = ((b * (25.0 - a))/(8*e)) + d
7z5jn7bk

7z5jn7bk1#

另一种方法是使用数组broadcasting,并完全摆脱zipfor循环:

# `C`: array of all `c`s
C = ((b[None, :] * (25.0 - a[None, :]))/(8*e[:, None])) + d[:, None]
dddzy1tm

dddzy1tm2#

您将乘以e并添加b。你的意思是相应地使用kj吗?

for (j, k) in zip(d, e):
    c = ((b * (25.0 - a))/(8*k)) + j

相关问题