我有一个起始值为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)
答案 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])