创建二维范围

时间:2015-02-25 22:11:05

标签: python python-2.7 numpy scipy

我有一个起始值为X的列向量,以及一个结束值为Z的列向量,我想创建一个矩阵,在X和{{1}之间创建linspace大小Z。有没有办法直接生成它而不需要迭代?

n,而这个简单示例中的n=10只是Z的向量。然后,以下代码

20

生成我想要的东西,但它需要迭代。是否有更高性能的解决方案,或者没有所有自己动手的逻辑直接构建的解决方案?

这是我的测试用例的预期输出:

X = np.arange(0,5,1)

Y = np.empty((5, 10))
for idx in range(0, len(X)):
    Y[idx] = np.linspace(X[idx], 20, 10)

2 个答案:

答案 0 :(得分:3)

那是np.meshgrid的用途。编辑:没关系,这不是你想要的。

这就是你想要的:

>>> X = np.arange(0, 5, 1)[:, None]
>>> Y = np.linspace(0, 1, 10)[None, :]
>>> X+Y*(20-X)
array([[  0.        ,   2.22222222,   4.44444444,   6.66666667,
      8.88888889,  11.11111111,  13.33333333,  15.55555556,
     17.77777778,  20.        ],
   [  1.        ,   3.11111111,   5.22222222,   7.33333333,
      9.44444444,  11.55555556,  13.66666667,  15.77777778,
     17.88888889,  20.        ],
   [  2.        ,   4.        ,   6.        ,   8.        ,
     10.        ,  12.        ,  14.        ,  16.        ,
     18.        ,  20.        ],
   [  3.        ,   4.88888889,   6.77777778,   8.66666667,
     10.55555556,  12.44444444,  14.33333333,  16.22222222,
     18.11111111,  20.        ],
   [  4.        ,   5.77777778,   7.55555556,   9.33333333,
     11.11111111,  12.88888889,  14.66666667,  16.44444444,
     18.22222222,  20.        ]])

答案 1 :(得分:1)

列表理解至少比循环更快,有时更容易理解(同样,几乎总是使用xrange代替range,顺便说一句:

matrix = np.array([np.linspace(x, 20, 10) for x in X])