gpt4 book ai didi

python - 在行 [NumPy 或 Tensorflow] 的索引值之前将行中的值设置为零

转载 作者:行者123 更新时间:2023-12-03 23:42:18 26 4
gpt4 key购买 nike

我有一个数组 A与形状 (N,)。我以 N=5 为例:

A = np.array([0,1,1,0,1])
我想将其转换为以下 NxN 矩阵 B . NumPy 和 Tensorflow 中的解决方案都很好,但后者是首选。
B = np.array([[0,1,1,0,1],
[0,1,1,0,1],
[0,1,1,0,1],
[0,0,0,0,1],
[0,0,0,0,1]])
一种解决方案可以包括以下步骤:
  • 重复数组 A N次
  • 遍历每一行 i .查找最后一个零的索引,直到 i-th该行的元素。
  • 用零替换该索引之前的所有元素。

  • 另一个 N=10 的例子:
    D = np.array([0,1,1,1,0,0,1,1,0,0])
    E = np.array([[0,1,1,1,0,0,1,1,0,0],
    [0,1,1,1,0,0,1,1,0,0],
    [0,1,1,1,0,0,1,1,0,0],
    [0,1,1,1,0,0,1,1,0,0],
    [0,0,0,0,0,0,1,1,0,0],
    [0,0,0,0,0,0,1,1,0,0],
    [0,0,0,0,0,0,1,1,0,0],
    [0,0,0,0,0,0,1,1,0,0],
    [0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0]])

    最佳答案

    A = np.array([0,1,1,0,1])
    N = A.shape[0]
    column = (A > 0).reshape((N, 1))
    mask = np.ones((N, N), dtype=np.bool)
    mask = np.where(column, False, np.tril(mask, -1))
    mask = np.cumsum(mask, axis=0)
    B = np.where(mask, 0, np.tile(A, (N, 1)))
    [[0 1 1 0 1]
    [0 1 1 0 1]
    [0 1 1 0 1]
    [0 0 0 0 1]
    [0 0 0 0 1]]
    解释
  • 计算下三角矩阵
  • [[False False False False False]
    [ True False False False False]
    [ True True False False False]
    [ True True True False False]
    [ True True True True False]]
  • 在 A 中查找并用 False 填充相应的行
  • [[False False False False False]
    [False False False False False]
    [False False False False False]
    [ True True True False False]
    [False False False False False]]
  • 计算累积总和以将下面的所有行设置为零。这是所有应该清零的元素的掩码
  • [[0 0 0 0 0]
    [0 0 0 0 0]
    [0 0 0 0 0]
    [1 1 1 0 0]
    [1 1 1 0 0]]
  • 重复数组 A N 次
  • [[0 1 1 0 1]
    [0 1 1 0 1]
    [0 1 1 0 1]
    [0 1 1 0 1]
    [0 1 1 0 1]]
  • 掩盖其元素
  • [[0 1 1 0 1]
    [0 1 1 0 1]
    [0 1 1 0 1]
    [0 0 0 0 1]
    [0 0 0 0 1]]

    关于python - 在行 [NumPy 或 Tensorflow] 的索引值之前将行中的值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65045232/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com