我正在尝试解决一个问题。假设我们有一个正方形数组:
In [10]: arr
Out[10]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
我希望做的是按照特定顺序展平这个数组:首先我想沿着轴0展平下三角,然后选取对角线,最后再次沿着轴0展平上三角,这样最终得到的展平数组如下:
# | lower triangle |diag.elements| upper triangle |
res = np.array([5, 9, 13, 10, 14, 15, 1, 6, 11, 16, 2, 3, 7, 4, 8, 12])
这是我目前的部分解决方案,但尚未得到预期的结果。
In [16]: arr[np.tril(arr, k=-1) != 0]
Out[16]: array([ 5, 9, 10, 13, 14, 15]) # not correct!
In [17]: np.diag(arr)
Out[17]: array([ 1, 6, 11, 16])
In [18]: arr[np.triu(arr, k=1) != 0]
Out[18]: array([ 2, 3, 4, 7, 8, 12]) # not correct!
最后,如何连接这3个中间结果以获得所需的结果?另外,是否有其他解决此问题的方法?
np.tri
函数如何生成索引。如果您要对不同的arr
数组重复执行此操作,您可能可以简化流程。 - hpaulj