Это тема знаний, основанная на более раннем вопросе, который у меня был сегодня.Вот некоторые странные несоответствия в поведении numpy, свидетелями которого я был.
Во-первых, если вы запустите этот код:
A = ones((10,4))
view = A[:,1]
view.fill(7)
A
Это изменит 2-й столбец на все 7, как массивыиндексируется от 0, а срезы - это просто представления одной и той же матрицы.Круто, это именно то, что я хочу, чтобы произошло.
Теперь, если вы запустите это:
A = ones((10,4))
view = A[:,1:2]
view.fill(7)
A
Это будет иметь те же эффекты, что и в первом примере.Почему a: b определяет столбцы от a до b-1?Есть ли конкретная причина для этого в языке?Кажется, что если я введу, скажем, 1: 3, это даст мне столбцы 1, 2 и 3, а не 1 и 2.
Наконец, если вы запустите это:
A = ones((10,4))
view = A[:,(1,2)]
view.fill(7)
A
Нет никаких побочных эффектов для A. Похоже, что если вы создаете представление с использованием кортежа, оно каким-то образом не правильно распространяет дальнейшие побочные эффекты на исходную матрицу.Есть идеи?