2015-07-20 4 views
0

Сегодня моя задача - сделать гистограмму для представления операции A^n, где A - матрица, но только для конкретных записей в матрице.Выполнение гистограммы из записей матрицы?

Например, у меня есть матрица, где строки суммируются с одним. Первая запись - некоторое определенное десятичное число. Однако, если я подниму эту матрицу на 2-ю степень, эта первая запись станет чем-то другим, и если я подниму эту матрицу на 3-ю степень, она снова изменится и т. Д. - анонс объявления, и это то, что мне нужно для построения.

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

Вот конкретный бит кода, который я говорю:

print("The intial probability matrix.") 

print(tabulate(matrix)) 

baseprob = [] 

for i in range(1000): 

    matrix_n = numpy.linalg.matrix_power(matrix, s) 

    baseprob.append(matrix_n.item(0)) 

print(baseprob) 

print("The final probability matrix.") 

print(tabulate(matrix_n)) 

Вот полный код, а также вывод я.

http://pastebin.com/EkfQX2Hu

ответ

0

Конечно, печатает только конечное значение, вы делаете ту же операцию, matrix^s, 1000 раз. Вы должны иметь s изменить каждый из этих 1000 раз.

Если вы хотите, чтобы вычислить все значения в месте matrix(0) для matrix^i где i это значение каждого из 1 в s (окончательный мощности) сделать:

baseprob = [] 

for i in range(1,s): #changed to do a range 1-s instead of 1000 

    #must use the loop variable here, not s (s is always the same) 
    matrix_n = numpy.linalg.matrix_power(matrix, i) 

    baseprob.append(matrix_n.item(0)) 

Тогда baseprob проведет matrix(0) для matrix^1, matrix^2 и т.д. . Весь путь до matrix^s.

+0

Ваш первый ответ - именно то, что я хотел с точки зрения данных, однако у меня возникли проблемы с представлением его в терминах гистограммы. Прямо сейчас, всякий раз, когда я пытаюсь это сделать, он печатает просто прямую линию в конечном значении. Ссылка на мой вывод: http://i.imgur.com/BNlXTJo.png Также, вот мой полный код: http://pastebin.com/XhJvQ22d Как вы можете видеть, значение baseprob перемещается между 0.97 до 0,90, но на гистограмме показана только линия на 0,90. –

+0

@RaleighL. Я не знаком с matplotlib, но я думаю, что ваша проблема связана с 'range = [minimum-0.1, minimum + 0.1]'. Это устанавливает диапазон только минимальным. Вы имели в виду создать переменную 'maximum' и сделать' range = [minimum-0.1, maximum + 0.1] '? – River

+0

Даже с этими изменениями (команда диапазона, которую вы дали), гистограмма все еще печатает только одну полосу ...? Мой выход: http://i.imgur.com/gWfoQw2.png Полный код: http://pastebin.com/G7DNUZLq –