【问题标题】:How to get Boundaries of an 'numpy.array'?如何获得“numpy.array”的边界?
【发布时间】:2018-01-04 23:35:57
【问题描述】:

如果我有一个d 维度np.array,我如何获得边界的索引?

例如,在 2d 中,

test = np.arange(16).reshape((4, 4))
test
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

现在我想知道边界

array([[ True,  True,   True,  True],
       [ True,  False,  False, True],
       [ True,  False,  False, True],
       [ True,  True,   True,  True]])

如果高效并且适用于任意数量的维度,那就太好了,但它必须至少工作 3。数组不一定是超立方体,但可能是超矩形:所有维度中的网格点数不一定相同,与示例不同。

对于形状为(4, 5, 6) 的数组,预期输出为

array([[[ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True]],
       [[ True,  True,  True,  True,  True,  True],
        [ True, False, False, False, False,  True],
        [ True, False, False, False, False,  True],
        [ True, False, False, False, False,  True],
        [ True,  True,  True,  True,  True,  True]],
       [[ True,  True,  True,  True,  True,  True],
        [ True, False, False, False, False,  True],
        [ True, False, False, False, False,  True],
        [ True, False, False, False, False,  True],
        [ True,  True,  True,  True,  True,  True]],
       [[ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True]]], dtype=bool)

【问题讨论】:

  • “每个维度的网格点数不一定相同”那么它不是一个NumPy数组,对吧?
  • @jdehesa 现在清楚了吗?我的意思是np.arange(20).reshape((4, 5)) 也是一个潜在的用例。
  • 啊抱歉我现在明白了,我以为你的意思是某种锯齿状数组之类的。

标签: python numpy


【解决方案1】:

你可以通过构造一个切片元组来做到这一点,例如

import numpy as np

def edge_mask(x):
    mask = np.ones(x.shape, dtype=bool)
    mask[x.ndim * (slice(1, -1),)] = False
    return mask

x = np.random.rand(4, 5)
edge_mask(x)

# array([[ True,  True,  True,  True,  True],
#        [ True, False, False, False,  True],
#        [ True, False, False, False,  True],
#        [ True,  True,  True,  True,  True]], dtype=bool)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多