Numpy中用于切片索引功能

2024-10-05 14:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个索引数组,我想返回这两个数组之间的所有索引,就像一个切片函数一样,它看起来像这样:

ind1 = np.array([2,6])
ind2 = np.array([2,3])

final = np.array([[2,2,2], [4,5,6]])

因为切割的轴不是固定的,所以我想到了这个:

^{pr2}$

但是,这依赖于1 + ind1 > ind2,它还包括最后一个索引(不是pythonic)。有没有人知道有一个函数可以做到这一点,或者更简洁的实现?
提前谢谢你。 迭戈

请注意,这个想法是从何而来的。我在考虑矩阵的子矩阵,我想从两个角的索引中访问它们。由于问题的性质,给定的角并不总是与@pelson的答案中所看到的方向相同。在


Tags: 函数答案np切片矩阵数组方向pythonic
1条回答
网友
1楼 · 发布于 2024-10-05 14:23:42

我没有把它放在一行代码中,但是类似下面这样的东西会重现您所要求的结果:

def index_slice(arr1, arr2):
    lens = np.abs(arr1 - arr2)
    if not all((lens == max(lens)) | (lens == 0)):
        raise ValueError('The number of indices in some dimensions were inconsistent. Array lengths were %r' % lens)

    max_len = lens.max()
    result = np.empty((len(lens), max_len), dtype=np.int32)

    for dim, (a, b) in enumerate(zip(arr1, arr2)):
        if a == b:
            result[dim, :] = a
        elif a > b:
            result[dim, :] = np.arange(a, b, -1)
        else:
            result[dim, :] = np.arange(a, b)

    return result   

例如:

^{pr2}$

然而,问这个问题让我怀疑,如果你分享你的上游逻辑,你可能正在做一些可以用更简单的方式完成的事情。在

高温

相关问题 更多 >