我想制作一个像这样的3d矩阵。
import numpy as np
x = np.linspace(0, 10, 11)
y = np.linspace(0, 10, 11)
z = np.linspace(0, 10, 11)
u = np.zeros((11, 11, 11))
for i in range(len(x)):
for j in range(len(y)):
for k in range(len(z)):
u[i, j, k] = np.min((x[i], y[j], z[k]))
结果如下。
array([[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 1., 1., ..., 1., 1., 1.],
[ 0., 1., 1., ..., 1., 1., 1.],
...,
[ 0., 1., 1., ..., 1., 1., 1.],
[ 0., 1., 1., ..., 1., 1., 1.],
[ 0., 1., 1., ..., 1., 1., 1.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 1., 1., ..., 1., 1., 1.],
[ 0., 1., 2., ..., 2., 2., 2.],
...,
[ 0., 1., 2., ..., 2., 2., 2.],
[ 0., 1., 2., ..., 2., 2., 2.],
[ 0., 1., 2., ..., 2., 2., 2.]],
...,
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 1., 1., ..., 1., 1., 1.],
[ 0., 1., 2., ..., 2., 2., 2.],
...,
[ 0., 1., 2., ..., 8., 8., 8.],
[ 0., 1., 2., ..., 8., 9., 9.],
[ 0., 1., 2., ..., 8., 9., 10.]]])
但是上面的代码非常耗时。 您能推荐其他任何方式来制作矩阵吗? 最好使用numpy模块进行编码。
答案 0 :(得分:2)
您可以使用np.minimum()
进行广播:
u2 = np.minimum(np.minimum(x[:, None, None], y[None, :, None]), z[None, None, :])
numpy.allclose(u, u2) # True