在Numpy中有更快的方法吗?

我想用numpy生成3D矩阵。代码是:

mean_value = np.array([1,2,3],dtype=np.float32)
h,w = 5,5
b = np.ones((h,w,1),dtype=np.float32) * np.reshape(mean_value,[1,1,3])
print(b.shape)  # (5,5,3)

是否有更快的方法来生成b?谢谢。

htkb07 回答:在Numpy中有更快的方法吗?

为了提高效率(内存,性能),只需将broadcastnp.broadcast_to一起用于视图输出-

np.broadcast_to(mean_value,(h,w,)+mean_value.shape)

作为一个视图,它没有内存开销,因此在运行时几乎没有空间。

让我们验证性能部分-

In [45]: mean_value = np.array([1,2,3],dtype=np.float32)
    ...: h,w = 5,5

In [46]: %timeit np.broadcast_to(mean_value,)+mean_value.shape)
100000 loops,best of 3: 3.21 µs per loop

In [47]: mean_value = np.random.rand(10000)
    ...: h,w = 5000,5000

In [48]: %timeit np.broadcast_to(mean_value,best of 3: 3.22 µs per loop

还有记忆部分(是视图)-

In [49]: np.shares_memory(mean_value,np.broadcast_to(mean_value,)+mean_value.shape))
Out[49]: True
本文链接:https://www.f2er.com/3140455.html

大家都在问