如何转换NumPy 1D数组:
np.array([1,2,3,4,5,6,7,8,9,10])
到一个像矩阵一样的邻接,即对角线上有零?所需输出:
[[0 0 0 0 0]
[1 0 0 0 0]
[2 5 0 0 0]
[3 6 8 0 0]
[4 7 9 10 0]]
输出也可以是既有上三角形又有下三角形的矩阵. 我已经try 使用numpy.triu和numpy.tril,但并不是所有的值都位于正确的位置.
如何转换NumPy 1D数组:
np.array([1,2,3,4,5,6,7,8,9,10])
到一个像矩阵一样的邻接,即对角线上有零?所需输出:
[[0 0 0 0 0]
[1 0 0 0 0]
[2 5 0 0 0]
[3 6 8 0 0]
[4 7 9 10 0]]
输出也可以是既有上三角形又有下三角形的矩阵. 我已经try 使用numpy.triu和numpy.tril,但并不是所有的值都位于正确的位置.
另一种可能的解决方案是:
n = 5
v = np.array([3, 6, 7, 10, 12, 5, 8, 19, 21, 23])
a = np.tril(np.ones((n, n), dtype='int'), -1)
b = np.cumsum(np.roll(a.sum(axis=0), 1))
b[-1] = 0
out = np.cumsum(a + np.diagflat(b), axis=0)
out = np.tril(out, -1)
np.tril(v[out-1], -1)
输出:
array([[ 0, 0, 0, 0, 0],
[ 3, 0, 0, 0, 0],
[ 6, 12, 0, 0, 0],
[ 7, 5, 19, 0, 0],
[10, 8, 21, 23, 0]])