Прежде всего, вы не нарезаете 0-> 9, 10-> 19, 20-> 29; ваши кусочки продвигаются только на 1: 0-> 9, 1-> 10, 11-> 20. Вместо этого попробуйте следующее:
n = 32
size = 10
b = list(map(lambda x:np.arange(x, x+size), np.arange(0, n*size, size)))
Далее, вы неправильно использовали индексную запись. b
представляет собой список массивов, и вы использовали весь весь список для индексации a
. Когда вы проиндексировали больше элементов, чем существует в a
, numpy
предполагает, что вы хотите, чтобы сложный список был взят как последовательность ссылок, и использует их как отдельные индексные массивы, по одному элементу a
на элемент листа в b
.
Однако, как только вы опускаетесь ниже предела len(a)
, тогда numpy
предполагают, что вы пытаетесь добавить многомерный срез в a
: каждый элемент из b
берется как срез в соответствующий размер a
. Поскольку a
является только одномерным, вы получите сообщение об ошибке. Ваш код будет работать в этом режиме с n=1
, но не с n=2
и выше.
Хотя ваш вопрос не является дубликатом, см. Также этот .
Вы можете использовать RuntimeHelpers.GetHashCode (object)
, который вызывает object.GetHashCode ()
не виртуально - это эквивалент System.identityHashcode
на Java. Я думаю, это то, что вы после. Так что ваш IEqualityComparer
просто использовал бы его для хеширования и object.ReferenceEquals
для равенства.