【发布时间】:2019-09-12 04:01:16
【问题描述】:
这是我要解决的一个问题。假设我们有一个方阵:
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 您想详细说明一下这个答案吗?我很想看到解决这个问题的替代方法。
标签: python numpy multidimensional-array flatten