Почему len (a [0]) отличается от a.shape [1] - PullRequest
1 голос
/ 10 ноября 2019

У меня есть матрица "a", которая имеет следующие свойства:

a.shape

(3, 220)

a.shape [1]

220

len (a)

3

len(a [0])

1

a [0]. Форма

(1, 220)

Я не понимаю, почему len (a [0]) отличается от a.shape [1]. Кажется, я никогда не смогу получить доступ к подрешетке a [0]. Пожалуйста, помогите мне понять, почему это так. Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019

Обратите внимание, numpy рекомендует здесь , что np.matrix не следует использовать, вместо этого просто используйте массивы:

Больше не рекомендуется использовать этот класс, даже для линейныхалгебра. Вместо этого используйте обычные массивы. Класс может быть удален в будущем.

Если вы посмотрите, что такое a[0], вы увидите проблему. Давайте реализуем это в меньшем размере, чтобы его было проще визуализировать:

import numpy as np

# I'm using all zeros here for simplicity
y = np.matrix(np.zeros((5, 10)))

y.shape
(5, 10)

y[0]
matrix([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

y[0] - это матрица , состоящая из 1 строки и 10 столбцов:

y[0].shape
(1, 10)

Если вы используете np.array, вы вообще избежите этой проблемы

x = np.zeros((5, 10))

x.shape
(5, 10)

len(x[0])
10

x[0].shape
(10,)

0 голосов
/ 10 ноября 2019

Как указал user2357112 , проблема заключается в том, что вы используете numpy.matrix вместо numpy.ndarray (через numpy.array).

Документация Numpy гласит следующее о matrix:

Больше не рекомендуется использовать этот класс, даже для линейной алгебры. Вместо этого используйте обычные массивы. Класс может быть удален в будущем.

Обычный массив Numpy очень похож на на матрицу, но может иметь любое количество измерений и использовать оператор @вместо * сделать матричное умножение.

...