【问题标题】:How to delete zeroes in the upper triangular part of a matrix with numpy如何用numpy删除矩阵上三角部分的零
【发布时间】:2023-01-21 01:39:59
【问题描述】:

我有一个形状为 (68,68) 的矩阵“A”,它的上三角只有零。下面的三角形有我感兴趣的值。例如:

>>> A
array([[ 0,  0,  0],
       [ 1,  0,  0],
       [ 2,  3,  0],
       [ 4,  5,  6]])

我怎样才能得到一个上三角没有值的矩阵“B”,如下所示:

>>> B
array([[  ,   ,  ],
       [ 1,   ,  ],
       [ 2,  3,  ],
       [ 4,  5, 6]])

【问题讨论】:

  • 我根本不知道 numpy 允许空矩阵条目。是否可以将单个条目设置为空?
  • Numpy 不允许矩阵中有空元素。但是如果你想要所有不为 0 的值,你可以使用 numpy.extractnumpy.nonzero() 函数来删除所有 0 值。
  • “如何获得上三角中没有值的矩阵‘B’”有没有这样的事作为 Numpy 数组的元素“没有值”。此外,没有实际的方法可以使用这样的结果。
  • 你是做什么的正在做B 不能忽略上三角条目吗?

标签: python numpy matrix numpy-ndarray


【解决方案1】:

numpy 中并没有真正表示“无价值”,至少不是以您解释的方式。

您可以获得的最接近的可能是np.nan,这是“不是数字”的常用表示形式。

np.nan 被视为一个数字,因为它不会破坏任何试图用它进行数学运算的代码,但它也不被视为零,因为用它完成的任何操作都会导致 np.nan。例如:

import numpy as np

>>> 0 + 10  
# output: 10

>>> np.nan + 10
# output: nan 

在您的情况下,将 A 的上三角部分替换为 np.nan 实际上意味着“在使用 A 完成的任何操作中忽略此部分”。

至于如何要将值替换为 np.nans,您可以执行以下操作:

import numpy as np

A = np.array([
    [ 0,  0,  0],
    [ 1,  0,  0],
    [ 2,  3,  0],
    [ 4,  5,  6],
])

A = A.astype(float)
A[A == 0] = np.nan

print(A)

输出:

[[nan nan nan]
 [ 1. nan nan]
 [ 2.  3. nan]
 [ 4.  5.  6.]]

请注意,我们必须将 A 从整数矩阵转换为浮点矩阵,因为 np.nans 在技术上被认为是浮点数。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多