【发布时间】:2021-11-13 19:25:34
【问题描述】:
我正在尝试使用 numpy 库重现以下函数,我想在不使用关键字 for 或 while 的情况下生成等效定义。我猜你需要使用广播、newaxis 和从 numpy 重塑。但是我是 numpy 的新手,并且不使用“for”或“while”来执行循环对我来说是一个令人费解的问题,尤其是在尝试使用嵌套循环时。
def _bcast(x):
x1, x2 = x
y = np.empty(x1.shape)
for i in range(x1.shape[0]):
for j in range(x1.shape[1]):
for k in range(x1.shape[2]):
y[i,j,k] = (x1[i,j,k]+4)*(4*x2[j,k] - 4)
return y
def _bcast_ax(x):
x1, x2 = x
y = np.empty((x1.shape[0], x2.shape[0], x2.shape[1]))
for i in range(x1.shape[0]):
for j in range(x2.shape[0]):
for k in range(x2.shape[1]):
y[i,j,k] = (4+x1[i,k])*(4*x2[j,k]-4)
return y
def bcast(x):
return (x1+4) * (4*x2 -4)
def bcast_ax(x):
return (x**2)*(x[1]*2)*(x[2]**4)
我尝试对这两个功能执行以下操作,但它们不起作用。
澄清一下,我需要这个测试通过 _bcast 和 bcast 产生相同的结果。 _bcast_ax 和 bcast_ax 相同
def test_bcast(self):
def _bcast(x):
x1, x2 = x
y = np.empty(x1.shape)
for i in range(x1.shape[0]):
for j in range(x1.shape[1]):
for k in range(x1.shape[2]):
y[i,j,k] = (x1[i,j,k]+4)*(4*x2[j,k] - 4)
return y
X = [(np.random.randn(3,4,5), np.random.randn(4,5)) for _ in range(3)]
self._test_fun(ac.bcast, _bcast, X)
【问题讨论】:
-
您需要一个minimal reproducible example,并显示“不起作用”的功能的回溯。根据我的推理,第一个
_bast不应该工作,因为索引不匹配。 -
X是 3 个数组元组的列表。您的任何功能都不适用于此功能。给出正确的minimal reproducible example 并带有正确的缩进。