如何在python中混合普通和切片参数

时间:2018-07-02 14:12:10

标签: python slice numpy-ndarray

我有一个类,我想从一个数组和一个切片创建一个实例。我希望语法使用冒号语法,例如列表和numpy数组。以下示例是MNWE(最小无效示例):

import numpy as np

class A():

    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data.__getitem__(index)

    @classmethod
    def fromArray(cls, array, index):
        return cls(array.__getitem__(index))

x = np.empty((4, 2, 2)) 
a = A(x)
print(a[:, 0, 0]) 

# Create from array, using slices:
my_slices = (slice(0, -1, 1), slice(0, 1, None), slice(0, 1, None))
b = A.fromArray(x, my_slices)
print(b.data)

# Create from array, using slice colon syntax (fails):
c = A.fromArray(x, :, 0, 0)
print(c.data)

除了平面尺寸外,我希望结果是相同的。

1 个答案:

答案 0 :(得分:0)

我不知道你想做什么。

如何制作工厂课程?

class AFactory:
    def __init__(self, x):
        self.x = x

    def __getitem__(self, index):
        return A.fromArray(self.x, index)

c = AFactory(x)[:, 0, 0]
print(c.data)

或者,如果您希望将切片设置在数组之前:

class AFactory:
    def __getitem__(cls, index):
        return lambda x: A.fromArray(x, index)

c = AFactory()[:, 0, 0](x)
print(c.data)