[python]是否有创建3d矩阵的快捷方式?

时间:2018-07-19 14:26:40

标签: numpy multidimensional-array

我想制作一个像这样的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模块进行编码。

1 个答案:

答案 0 :(得分:2)

您可以使用np.minimum()进行广播:

u2 = np.minimum(np.minimum(x[:, None, None], y[None, :, None]), z[None, None, :])
numpy.allclose(u, u2)  # True