假设我有这个数组:
import numpy as np
x = np.arange(4)
array([0, 1, 2, 3])
我想写一个非常基本的公式,它将从x生成这个数组:
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]])
使用python和numpy做最短的方法是什么?
由于
答案 0 :(得分:1)
我能想到的最简单的方法就是使用numpy广播。
x[:,None]+x
Out[87]:
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]])
答案 1 :(得分:0)
这应该做你想要的(注意我引入了不同数量的行(5)而不是列(4)以明确区分):
import numpy as np
A = np.tile(np.arange(4).reshape(1,4),(5,1))+np.tile(np.arange(5).reshape(5,1),(1,4))
print(A)
分解步骤:
np.tile(np.arange(4).reshape(1,4),(5,1))
创建一个(5,4)矩阵,每行有0,1,2,3项:
[[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]]
np.tile(np.arange(5).reshape(5,1),(1,4))
在每列中创建一个(5,4)矩阵,其中包含0,1,2,3,4:
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]]
两者的总和会产生你想要的结果:
[[0 1 2 3]
[1 2 3 4]
[2 3 4 5]
[3 4 5 6]
[4 5 6 7]]