gpt4 book ai didi

python - NumPy - 删除包含相同元素的子数组

转载 作者:行者123 更新时间:2023-12-02 18:16:05 27 4
gpt4 key购买 nike

假设我有以下 4 x 3 x 3 数组,

array([[[-2, -2, -2],
[-2, -2, -2],
[-2, -2, -2]],

[[-2, -2, -2],
[-2, -2, -2],
[-2, -2, -2]],

[[-2, -2, 71],
[-1, -1, -1],
[71, -1, 52]],

[[-2, -2, -2],
[-2, -2, -2],
[-2, -2, -2]]])

我想按以下标准过滤此类数组:

将每个 3 x 3 数组视为一个 block 。如果该 block 中的所有元素都等于 -2,我们应该切割整个 block ,因此目标数组将如下所示(1 x 3 x 3):

array([[[-2, -2, 71],
[-1, -1, -1],
[71, -1, 52]]])

我只能想出一个带有显式 if 条件和 for 循环的强力解决方案,但它不起作用。谁能分享一下更好的方法吗?

您可以通过以下命令重新创建原始数组

array = np.array([[-2,-2,-2,-2,-2,-2,-2,-2,-2],
[-2,-2,-2,-2,-2,-2,-2,-2,-2],
[-2,-2,71,-1,-1,-1,71,-1,52],
[-2,-2,-2,-2,-2,-2,-2,-2,-2]])
newarr = array.reshape(4,3,3)

最佳答案

如果您希望沿轴 0 的数组始终为特定值(例如 -2 或 872385 等),那么其他答案很好。

如果您想要更通用的内容,即想要过滤掉包含单个值的任何数组,则可以按排名过滤数组。

由于任何单个值的矩阵都具有秩 1,因此您可以按 rank != 1 进行过滤:

In [2]: x[np.linalg.matrix_rank(x) != 1]
Out[2]:
array([[[-2, -2, 71],
[-1, -1, -1],
[71, -1, 52]]])

这适用于沿轴 0 填充相同值的任何矩阵。另一个例子:

In [4]: x
Out[4]:
array([[[ 5, 5, 5],
[ 5, 5, 5],
[ 5, 5, 5]],

[[-2, -2, -2],
[-2, -2, -2],
[-2, -2, -2]],

[[-2, -2, 71],
[-1, -1, -1],
[71, -1, 52]],

[[99, 99, 99],
[99, 99, 99],
[99, 99, 99]]])

In [5]: x[np.linalg.matrix_rank(x) != 1]
Out[5]:
array([[[-2, -2, 71],
[-1, -1, -1],
[71, -1, 52]]])

关于python - NumPy - 删除包含相同元素的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71567493/

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