numpy.triu、numpy.triu_indices、np.triu_indices_from函数使用

numpy.triu(arr, k=0),返回矩阵的上三角,此时下三角的元素全为0,k=0表示主对角线的位置,k=1表示主对角右移1,k=-1表示对角线左移1

配合例子看—》  """三个引号"""中是代码的输出

注意虽然保留了上三角的值,但是其他的值全部成为了0,最后返回的是矩阵

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.triu(arr, 0)

"""
array([[1, 2, 3],
       [0, 5, 6],
       [0, 0, 9]])
"""

np.triu(arr, -1)

"""
array([[1, 2, 3],
       [4, 5, 6],
       [0, 8, 9]])
"""
 
np.triu(arr, 1)
"""
array([[0, 2, 3],
       [0, 0, 6],
       [0, 0, 0]])
"""
 

np.triu_indices_from()和numpy.triu_indices()函数功能应该是一样的,即返回上三角矩阵的index,但是参数不同

np.triu_indices_from(arr, k=0)

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
arr_ind = np.triu_indices_from(arr, 0)
print(arr_ind)
"""
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(array([0, 0, 0, 1, 1, 2], dtype=int64), array([0, 1, 2, 1, 2, 2], dtype=int64))
"""

arr[(arr_ind)] #将index返回矩阵,矩阵返回对应index的值,返回的是array

"""
array([1, 2, 3, 5, 6, 9])
"""

np.triu_indices_from(arr, k=1)

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
arr_ind = np.triu_indices_from(arr, k=1)
print(arr_ind)

"""
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(array([0, 0, 1], dtype=int64), array([1, 2, 2], dtype=int64))
"""

arr[(arr_ind)] #将index返回矩阵,矩阵返回对应index的值,返回的是array
"""
array([2, 3, 6])
"""

可以看到参数k不同,结果不同,并且此处的k与numpy.triu(arr, k)中的k一致

numpy.triu_indices(),此处的k与numpy.triu(arr, k)和np.triu_indices_from(arr, k)中的k一致

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
arr_ind = np.triu_indices(3, k=1)
print(arr_ind)
print(arr[arr_ind]) #将得到的index返回矩阵,矩阵返回index对应的值,返回的是array

"""
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(array([0, 0, 1], dtype=int64), array([1, 2, 2], dtype=int64))

[2 3 6] #print(arr[arr_ind])的打印
"""

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
arr_ind = np.triu_indices(3, k=0)
print(arr_ind)
print(arr[arr_ind])

"""
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(array([0, 0, 0, 1, 1, 2], dtype=int64), array([0, 1, 2, 1, 2, 2], dtype=int64))

[1 2 3 5 6 9]
"""
 

猜你喜欢

转载自blog.csdn.net/ziqingnian/article/details/112334946