gpt4 book ai didi

python - 在 np.nonzero 中获取 numpy 二维切片的原始行

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:26 24 4
gpt4 key购买 nike

在我的程序中,我取了一个 N*N 矩阵的二维切片:

message = np.eye(10)
depth = 4
slice = message [depth:]

输出:

[[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]

my_ones = np.nonzero(slice)

输出:

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

因此,正如我们所见,它将切片视为一个新数组,因此非零函数的行从 0 开始,而不是 4。但是我想要相对于原始数组的行号,而不是而不仅仅是我选择检查的部分。

当然,我可以保存删除的行数(或列数,如果是这样的话),然后为非零函数的每一行添加该数字。但是,这非常不优雅,如果我制作大量不同的切片,会使我的代码变得粗糙。

有没有一种方法可以让非零函数意识到它正在查看更大数组的一部分并输出与该上下文相关的行?

For example, in this case, I would want the desired output of: (array([4, 5, 6, 7, 8, 9]), array([4, 5, 6, 7, 8, 9])), because those were the actual rows in the original 2d array (message).

谢谢。

最佳答案

我宁愿将 message 复制到 slice 并将其 depth 的第一行替换为零,然后使用 np.nonzero 以下

slice = np.array(message)
slice[:depth] = 0
my_ones = np.nonzero(slice)

输出:

(array([4, 5, 6, 7, 8, 9], dtype=int64),
array([4, 5, 6, 7, 8, 9], dtype=int64))

关于python - 在 np.nonzero 中获取 numpy 二维切片的原始行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426669/

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