用numpy数组来理解列表不好吗?

2024-04-26 14:10:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道下面的方法是否会被认为是不好的做法,如果是这样的话,是否有人可以为另一种方法提供一些指导。在

以下是相关代码:

a = np.array([[1,2,3],[4,5,6]])
b = np.array([-5,5])
c = np.array([np.multiply(a[x],b[x]) for x in range(2)])

这里的目标是获得与“a”形状相同的数组,其中“a”的第一个元素中的值乘以“b”的第一个元素,“a”的第二个元素中的值乘以“b”的第二个元素

上面的代码可以工作,但是考虑到所涉及的列表/数组的混合,我担心这是不建议使用的-但是我不清楚更优雅的解决方案。先谢谢你!在


Tags: 方法代码in元素目标列表fornp
1条回答
网友
1楼 · 发布于 2024-04-26 14:10:08

NumPythonic方法是将b的维数扩展到一个带有{a1}的二维数组,然后让^{}vectorized elementwise multiplication起作用。执行应该是这样的-

c = a * b[:,None]

一旦维度被扩展,您还可以使用np.multiply获得相同的效果,如下-

^{pr2}$

最重要的是,这里有一些性能数字可以说服您使用broadcasting-

In [176]: a = np.random.rand(2000,3000)

In [177]: b = np.random.rand(2000)

In [178]: %timeit np.array([np.multiply(a[x],b[x]) for x in range(a.shape[0])])
10 loops, best of 3: 118 ms per loop

In [179]: %timeit a * b[:,None]
10 loops, best of 3: 63.8 ms per loop

In [180]: %timeit np.multiply(a,b[:,None])
10 loops, best of 3: 64 ms per loop

相关问题 更多 >