Недавно я попытался создать код, похожий на цепь Маркова, который вычисляет вероятности переходов в заданных результатах (= список).Я написал код в нескольких ячейках и т. Д. И знаю, что он работает, но теперь я хотел бы определить одну функцию, чтобы иметь возможность выполнять всю работу в рамках этой одной функции.
Цель: 1) Создать список, в который все результаты (пустые списки) загружаются из файла на рабочем столе 2) Использовать принцип Маркова для каждого объекта в списке 3) Сохранить результаты как .npy по порядкучтобы использовать его позже
Я застрял на уровне 2. Это мой код до сих пор.Может быть, это немного грязно, но я относительно новичок в области кодирования :)
%matplotlib inline
import numpy as np
import random
import matplotlib.pyplot as plt
import scipy.spatial as spatial
import sklearn.decomposition as PCA
import networkx as nx
import os
import matplotlib
import random
import glob
import pandas as pd
def Markov_Chain():
tracking_files_npy = glob.glob('path of file/*.npy')
tracking_files_npy.sort # Find and sort all the tracking data
loaded_tracks = [] # Create empty list for later
print(tracking_files_npy)
for file in tracking_files_npy:
transitions_from_videos = np.load (file)
loaded_tracks.append(transitions_from_videos) # load all the npy files and add them to the list
for objects in loaded_tracks:
amount_of_classes = np.max(objects) +1 # calculate the amount of the classes in each video
transition_matrix_tryout = np.zeros(shape =(amount_of_classes,amount_of_classes)) # create an array, size = classes
for transition_lists in loaded_tracks:
for first_state in range(amount_of_classes):
initional_state = np.argwhere (loaded_tracks[transition_lists][:-1] == first_state) # try to reach the list which contains the loaded tracks
index_next_state = initional_state + 1
transition_to_state_two = loaded_tracks[transition_lists][index_next_state] # go for second state
for second_state in range (amount_of_classes):
if first_state == second_state:
continue
transition_curr_state_to_next_state = np.argwhere(transition_to_state_two == second_state)
if len(np.argwhere(transition_to_state_two != first_state)) == 0:
print(first_state, second_state)
continue
probability_one_to_two = (len(transition_curr_state_to_next_state)/len(np.argwhere(transition_to_state_two != first_state)))
transition_matrix_tryout[first_state,second_state] = probability_one_to_two
print(transition_matrix_tryout)
sum_of_probabiilities_tryout = np.sum(transition_matrix_tryout,1)
print(sum_of_probabiilities_tryout)
Markov_Chain()
Теперь я застрял в той части, где я пытаюсь найти массив в списке.В этом цикле я стараюсь сделать все для первого, второго, третьего, ... массива в списке «loaded_tracks ».
Спасибо за вашу помощь, ребята, и не стесняйтесь задавать вопросы.С уважением