z 方向的 Numpy 广播
Numpy broadcasting in z direction
在机器学习环境中,我需要对每个元素进行乘法运算。为了有效地执行此操作,我需要以特定方式广播 3D 张量的元素,以便每个 2x2 矩阵重复 n 次,如以下示例所示,其中 n=2:
import numpy as np
a = np.linspace(1,12,12)
a = a.reshape(3,2,2)
# what to put here?
<some statements>
print a
# result:
[[[ 1. 2.]
[ 3. 4.]]
[[ 1. 2.]
[ 3. 4.]]
[[ 5. 6.]
[ 7. 8.]]
[[ 5. 6.]
[ 7. 8.]]
[[ 9. 10.]
[ 11. 12.]]
[[ 9. 10.]
[ 11. 12.]]]
什么语句可以完成这项工作?
谢谢!
这是一个 np.repeat
在您将 a
作为 3D
数组后沿第一个轴复制的 -
N = 2 # replication number
out = np.repeat(a,N,axis=0)
或者,对于 4D
只读输出,我们可以使用 np.broadcast_to
创建一个视图,这将非常有效,因为我们不会占用任何额外的内存,比如所以-
m,n,r = a.shape
out = np.broadcast_to(a[:,None],(m,N,n,r))
# Confirm it's a view
In [32]: np.shares_memory(a, out)
Out[32]: True
在机器学习环境中,我需要对每个元素进行乘法运算。为了有效地执行此操作,我需要以特定方式广播 3D 张量的元素,以便每个 2x2 矩阵重复 n 次,如以下示例所示,其中 n=2:
import numpy as np
a = np.linspace(1,12,12)
a = a.reshape(3,2,2)
# what to put here?
<some statements>
print a
# result:
[[[ 1. 2.]
[ 3. 4.]]
[[ 1. 2.]
[ 3. 4.]]
[[ 5. 6.]
[ 7. 8.]]
[[ 5. 6.]
[ 7. 8.]]
[[ 9. 10.]
[ 11. 12.]]
[[ 9. 10.]
[ 11. 12.]]]
什么语句可以完成这项工作?
谢谢!
这是一个 np.repeat
在您将 a
作为 3D
数组后沿第一个轴复制的 -
N = 2 # replication number
out = np.repeat(a,N,axis=0)
或者,对于 4D
只读输出,我们可以使用 np.broadcast_to
创建一个视图,这将非常有效,因为我们不会占用任何额外的内存,比如所以-
m,n,r = a.shape
out = np.broadcast_to(a[:,None],(m,N,n,r))
# Confirm it's a view
In [32]: np.shares_memory(a, out)
Out[32]: True