在Numpy中有更快的方法吗?

问题描述 投票:0回答:1

我想以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?谢谢。

python numpy numpy-ndarray numpy-broadcasting
1个回答
0
投票

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

np.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,(h,w,)+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,(h,w,)+mean_value.shape)
100000 loops, best of 3: 3.22 µs per loop
© www.soinside.com 2019 - 2024. All rights reserved.