在 Numpy 中有更快的方法吗?
Is there a quicker way to do this in 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
?谢谢
为了效率(内存、性能),简单地 broadcast
和 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
和内存部分(作为视图)-
In [49]: np.shares_memory(mean_value,np.broadcast_to(mean_value,(h,w,)+mean_value.shape))
Out[49]: True
我想在 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
?谢谢
为了效率(内存、性能),简单地 broadcast
和 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
和内存部分(作为视图)-
In [49]: np.shares_memory(mean_value,np.broadcast_to(mean_value,(h,w,)+mean_value.shape))
Out[49]: True