So indizieren Sie ein kartesisches ProduktPython

Python-Programme
Guest
 So indizieren Sie ein kartesisches Produkt

Post by Guest »

Angenommen, die Variablen x und Theta können die möglichen Werte [0, 1, 2] bzw. [0, 1, 2, 3] annehmen .

Nehmen wir an, dass in einer Erkenntnis x = 1 und Theta = 3 ist. Der natürliche Weg, dies darzustellen, ist ein Tupel (1,3). Ich möchte jedoch stattdessen den Status (1,3) durch einen einzelnen Index kennzeichnen. Eine „Brute-Force“-Methode hierfür besteht darin, das kartesische Produkt aller möglichen geordneten Paare (x,theta) zu bilden und es nachzuschlagen:

Code: Select all

import numpy as np
import itertools

N_x = 3
N_theta = 4

np.random.seed(seed = 1)
x = np.random.choice(range(N_x))
theta = np.random.choice(range(N_theta))

def get_box(x, N_x, theta, N_theta):
states = list(itertools.product(range(N_x),range(N_theta)))
inds = [i for i in range(len(states)) if states[i]==(x,theta)]
return inds[0]

print (x, theta)
box = get_box(x, N_x, theta, N_theta)
print box
Dies ergibt (x, theta) = (1,3) und box = 7, was Sinn macht, wenn wir es nachschlagen die Staaten-Liste:

Code: Select all

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
Dieser „Brute-Force“-Ansatz scheint jedoch ineffizient zu sein, da es möglich sein sollte, den Index im Voraus zu bestimmen, ohne ihn nachzuschlagen. Gibt es eine allgemeine Möglichkeit, dies zu tun? (Die Anzahl der Zustände N_x und N_theta kann in der tatsächlichen Anwendung variieren und das kartesische Produkt enthält möglicherweise mehr Variablen.)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post