Я не ожидал, что они будут другими, пока мне не понадобилось 2 часа, чтобы найти ошибку.Вот пример, показывающий разницу, которую я заметил, но я не мог ее понять.
>>> a = np.array([[1, 2], [3, 4]])
>>> a[0][0]
1
>>> a[np.array(0)][np.array(0)]
1
>>> a[0][0] = 5
>>> a
array([[5, 2],
[3, 4]])
>>> a[np.array(0)][np.array(0)] = 6
>>> a
array([[5, 2],
[3, 4]])
Похоже, что в качестве индекса нельзя использовать скалярный скаляр, чтобы изменить элемент.Возвращается ли копия исходного элемента массива вместо ссылки?
Однако при индексации кортежа проблема исчезла.
>>> a[np.array(0), np.array(0)] = 6
>>> a
array([[6, 2],
[3, 4]])
Что здесь происходит?Я понимаю, что по отдельности индексация цепочки скобок и индексация кортежей различны, но в принципе не должны ли они оба обращаться к одному и тому же элементу независимо от этого?
Из любопытства я попробовал сделать это с одномерным массивом.Результат будет другим.
>>> a = np.array([1, 2])
>>> a[np.array(0)] = 3
>>> a
array([3, 2])
На этот раз элемент был изменен.
Урок, который я усвоил, заключается в том, что я должен максимально использовать индекс кортежа для пустых массивов, чтобы быть в безопасности.,Но мне бы очень хотелось объяснить эти противоречивые эффекты.Спасибо!