NumPy matrix
объекты пытаются гарантировать, что они всегда 2D, но они не совсем выполняют свою работу.
Когда вы делаете
b = np.asmatrix(range(0, num))
range(0, num)
- это одномерная последовательность, но asmatrix
создает однорядную 2D-матрицу вместо 1D-объекта. asarray
даст массив 1D.
Когда вы делаете
a[b]
Это необычная операция индексации, которая создает матрицу 3D . numpy.matrix
объекты никогда не должны быть трехмерными, и следующие transpose
не знают, как с этим справиться, что приводит к бессмысленным результатам. В частности, из-за ошибки округления странные числа, почти равные 0, на выходе равны , а не ; они происходят из-за бессмысленных шагов результирующей матрицы, которые приводят к неравномерному доступу к памяти и пытаются прочитать фрагменты отдельных операций с плавающей запятой как один процесс:
In [13]: a[b].transpose().strides
Out[13]: (1, 24)
Это шаг в 1 байт в первом измерении.
Ключ на вынос здесь: не используйте numpy.matrix
.