Разница между массивом и матрицей numpy для решения линейных уравнений

На том же основании уже задано много вопросов. Я также прочитал официальную документацию (http://www.scipy.org/scipylib/faq.html#what-is-the-difference-between-matrices-and-arrays) относительно различий. Но я все еще пытаюсь понять философскую разницу между массивами numpy и матрицами.

Более того, я ищу причину приведенных ниже результатов.

   #using array
>>> A = np.array([[ 1, -1,  2],
              [ 0,  1, -1],
              [ 0,  0,  1]])
>>> b = np.array([5,-1,3])
>>> x = np.linalg.solve(A,b)
>>> x
array([ 1.,  2.,  3.])

`#using matrix
>>> A=np.mat(A)
>>> b=np.mat(b)
>>> A
matrix([[ 1, -1,  2],
        [ 0,  1, -1],
        [ 0,  0,  1]])
>>> b
matrix([[ 5, -1,  3]])
>>> x = np.linalg.solve(A,b)
>>> x
matrix([[  5.,  -1.,   3.],
        [ 10.,  -2.,   6.],
        [  5.,  -1.,   3.]])

Почему линейные уравнения, представленные в виде массива, дают правильное решение, а матричное представление дает другое матричное решение.

Также, честно говоря, я не понимаю, зачем брать матрицу в качестве решения во втором случае.

Извините, если на вопрос уже дан ответ, и я не заметил, а также извините меня, если я неправильно понимаю массив и матрицу numpy.


person Arul Selvam    schedule 01.05.2015    source источник


Ответы (1)


У вас есть проблема с транспонированием... когда вы переходите к матричной земле, векторы-столбцы и векторы-строки больше не являются взаимозаменяемыми:

import numpy as np

A = np.array([[ 1, -1,  2],
              [ 0,  1, -1],
              [ 0,  0,  1]])
b = np.array([5,-1,3])
x = np.linalg.solve(A, b)
print 'arrays:' 
print x

A = np.matrix(A)
b = np.matrix(b)
x = np.linalg.solve(A, b)
print 'matrix, wrong set up:'
print x

b = b.T
x = np.linalg.solve(A, b)
print 'matrix, right set up:'
print x

дает:

arrays:
[ 1.  2.  3.]
matrix, wrong set up:
[[  5.  -1.   3.]
 [ 10.  -2.   6.]
 [  5.  -1.   3.]]
matrix, right set up:
[[ 1.]
 [ 2.]
 [ 3.]]
person 8one6    schedule 01.05.2015
comment
Теперь я понял, где ошибался. Большое спасибо. Ответ идеально подходит к тройнику. - person Arul Selvam; 01.05.2015
comment
@SaulloCastro Спасибо, что сообщили мне. Я не знал, что могу принять ответ. Я новичок в stackoverflow.com. - person Arul Selvam; 01.05.2015