python - 在不使用 [slice,slice] 语法的情况下使用 Numpy 多维数组切片?

标签 python arrays numpy multidimensional-array

有没有办法不使用 [slice, slice] 语法就可以使用 Numpy 的多维数组切片?

我需要能够从正常的函数调用中使用它,但我还没有找到使用 slice 对象来完成它的方法。

我不能使用语法 [(slice,slice)]对于我的程序,因为 []是常规函数调用之外的特殊语法。 我使用的语言是 Hy,一种用于 Python 的 Lisp,它不支持这种语法。更重要的是,它不应该支持这种语法。然而,Numpy 似乎不支持不使用 [] 的多维切片。语法。

让我感到困惑的是,Numpy 源代码中 C 和 Python 的混合使得很难辨别 [slice,slice] 是如何产生的。实现。 甚至可能无法规避此语法。

编辑:

@Joe Kington 在下面提供的答案允许像这样对 Numpy 矩阵进行切片:

x = np.array([list(range(5)) for x in list(range(5))]) x.<strong>getitem</strong>(slice(1,4)) array([[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]) x.<strong>getitem</strong>(tuple([slice(1,4),slice(1,4)])) array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])

最佳答案

从你的描述来看,你好像在问什么函数调用是用来实现切片和切片赋值的。

Python 使用“特殊”方法 __getitem____setitem__ 来实现和/或允许自定义切片的工作方式。任何实现这些的类都可以被切片。实际上,这与 numpy 无关。

换句话说

x = arr[4:10, 9:15, ::-1]
x[0] = 100

翻译成

x = arr.__getitem__((slice(4, 6), slice(9, 10), slice(None, None, -1)))
x.__setitem__(0, 100)

例如:

class Foo(object):
    def __getitem__(self, index):
        print 'Getting', index
    def __setitem__(self, index, val):
        print 'Setting', index, 'to', val

f = Foo()
print 'Getting...'
f[:]
f[4:10, ::-1, ...]

print 'Equivalently:'
f.__getitem__(slice(None))
f.__getitem__((slice(4, 10), slice(None, None, -1), Ellipsis))

print 'Setting...'
f[0] = 1
f[5:10, 100] = 2
f[...] = 100

print 'Equivalently:'
f.__setitem__(0, 1)
f.__setitem__((slice(5,10), 100), 2)
f.__setitem__(Ellipsis, 100)

此外,了解 numpy.index_exp(或等效的 np.s_)也很方便。这没什么特别的——它只是将切片转换成等效的元组等。它与我们上面的 Foo 类非常相似。例如:

In [1]: np.index_exp[10:4, ::-1, ...]
Out[1]: (slice(10, 4, None), slice(None, None, -1), Ellipsis)

关于python - 在不使用 [slice,slice] 语法的情况下使用 Numpy 多维数组切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536601/

相关文章:

python - 如何对两列的 Python 列表进行打乱?

python - SQLAlchemy:禁用延迟加载并仅在 join() 上加载对象

c - 在 C 中访问 malloc 的二维数组

c# - 如何在 C# 中的泛型列表中搜索特定值?

Python——从正态(截断为 0)分布生成值

python - 我应该检查构造函数参数的类型(以及其他地方)吗?

python - Spark 中的 PCA 输出与 scikit-learn 不匹配

php - JSON 数组到 MySQL 数据库

numpy - 与 scipy 的累积辛普森集成

python - 如何求 NumPy 数组的元素模