如何转换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]])

Python相关问答推荐

螺旋桨图上意外颠倒的次y轴

仅使用2种 colored颜色 创建热图

单击cookie按钮,但结果不一致

如何使用函数正确索引收件箱?

使用Python进行网页抓取,没有页面

Plotly:如何更改Heatmap中彩色条的勾选文本

如何在vercel中指定Python运行时版本?

绘制系列时如何反转轴?

"如果发生特定错误,返回值

如何将带有逗号分隔的数字的字符串解析为int Array?

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

使用matplotlib pcolormesh,如何停止从一行绘制的磁贴连接到上下行?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

Python会扔掉未使用的表情吗?

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

如何创建一个缓冲区周围的一行与manim?

在np数组上实现无重叠的二维滑动窗口

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

合并与拼接并举