1

Есть матрица:

a = [[1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8],
     [1, 2, 3, 4, 5, 6, 7, 8]]

Мне нужно получить столбец этой матрицы. Подскажите, почему a[:][0] выдает

[1, 2, 3, 4, 5, 6, 7, 8]

а не

[1, 1, 1, 1, 1, 1, 1, 1]

?

xaja
  • 2,969
  • 1
    Можно вот так: x = [x[0] for x in a] – Александр Друзь Oct 30 '16 at 21:39
  • borisrozumnuk, спасибо за ответ. Но мне нужно со срезами. И возникает вопрос , почему последовательность a[0][0], a[1][0], a[2][0], ..., a[7][0] выдаст первый столбец, а a[:][0] - нет? Ведь это одно и то же, насколько я понимаю. – Alexander Oct 30 '16 at 22:10
  • 3
    вроде как a[:][0] почти равнозначно a[0]. Почти, потому что создается копия a. – Александр Друзь Oct 30 '16 at 22:14
  • @borisrozumnuk, понял теперь. Спасибо. – Alexander Oct 30 '16 at 22:20
  • Надо умножить матрицу на вектор, в котором все элементы, кроме i-го (номер столбца, который нужно получить) равно нулю, а i-ый равен единице. Результатом такого умножения станет i-й столбец. А студент получит пятёрку за необычное решение с применением алгебры, вместо тупого перебора элементов массива. – Sergey Oct 31 '16 at 05:17

1 Answers1

3
a=np.array(a)    
a[:, 0]

выдаст первый столбец и тд, надо только задать матрицу явно

Max K
  • 43
  • Что вы имеете ввиду? Почему так происходит? Дайте, пожалуйста развернутый ответ. – kizoso Mar 14 '17 at 21:30
  • Пожалуйста, опишите решение проблемы более детально, чтобы пользователям было легче понять ваш ответ. Для редактирования ответа, нажмите [Edit]. Так же можете ознакомиться с советами о том, как написать хороший ответ. - Из очереди проверок – Yuri Mar 14 '17 at 22:07
  • Не выдаст. Даже 3.6.1 пишет "TypeError: list indices must be integers or slices, not tuple" – vitidev Apr 15 '17 at 01:01
  • 1
    чтобы ошибки не возникало следует задать матрицу явно: a=np.array(a) – Max K Jan 20 '18 at 12:02