如何在python中从整个3D数组中提取上限值



是否可以从整个3D数组中提取上限值? 下面是一个 3D 数组的简单示例:

import numpy as np
a = np.array([[[7, 4, 2], [5, 0, 4], [0, 0, 5]],
[[7, 6, 1], [3, 9, 5], [0, 8, 7]],
[[8, 10, 3], [1, 2, 15], [9, 0, 1]]]) 

您可以使用 numpy 构建矩阵函数,如 numpy.triu(三角形上(或 numpy.tril(三角形下(来返回矩阵的副本,其中第 k 对角线上方或下方的元素为零。

另一方面,如果您只对对角线上方或下方的值感兴趣(没有矩阵的副本(,则可以简单地使用 numpy.triu_indices 和 numpy.tril_indices,如下所示:

upper_index = np.triu_indices(n=3, k=1)

其中n是返回的索引将有效的数组的大小,k对角偏移量。

并返回三角形的索引。返回的元组包含两个数组,每个数组的索引沿数组的一个维度:

(array([0, 0, 1], dtype=int64), array([1, 2, 2], dtype=int64))

现在,您可以将获得的索引用作数组的索引,您将获得:

a[upper_index]

并给出:

array([[5, 0, 4],
[0, 0, 5],
[0, 8, 7]])

同样,您可以使用numpy.tril_indices在对角线下找到零件。

IUUC,您可以使用triu_indices:

result = a[np.triu_indices(3)]
print(result)

输出

[[7 4 2]
[5 0 4]
[0 0 5]
[3 9 5]
[0 8 7]
[9 0 1]]

如果你想要那些严格高于对角线,你可以传递一个偏移值:

result = a[np.triu_indices(3, 1)]
print(result)

输出

[[5 0 4]
[0 0 5]
[0 8 7]]

最新更新