2010-09-04 17 views
5

he estado programando desde hace 8 años y ahora me estaba preguntando que si hay algún uso práctico de la matriz n-dimensional, donde N> 3. Solo puedo visualizar una estructura de datos que sea menor o igual a 3 dimensiones. ¿Alguno de los usuarios ha utilizado más de 3 dimensiones en algún programa? ¿Hay algún uso práctico de una matriz ND que supere el 3D? De ser así, publique algunas muestras .uso práctico de matrices n-dimensional, donde (N> 3)

+3

Por lo general, utilizaría alguna otra estructura de datos, porque los datos de alta dimensión tienden a ser escasos y gran parte de la matriz se desperdiciará. – starblue

Respuesta

2

el único ejemplo decente recuerdo estaba en el texto de 1982 Oh! Pascal! que te da una idea de lo raro que ha sido en mi experiencia.

El ejemplo era un sistema de mantenimiento de inventario donde los pantalones vaqueros podrían ser indexados por

inventory[sex][size][length][color][fit] = number_received 

que es sólo ligeramente artificial. No tendría problemas con una base de datos estructurada de esa manera, pero se ve gracioso como código.

3

tomar casi cualquier cosa de la física, donde tensores son comunes, por ejemplo la relatividad general, la química computacional, la física cuántica.

http://en.wikipedia.org/wiki/Tensor#Applications

Tensor con rango 4 es común por ejemplo.

http://www.oonumerics.org/FTensor/FTensor.pdf

http://mpqc.svn.sourceforge.net/viewvc/mpqc/trunk/mpqc/src/lib/chemistry/qc/lmp2/lmp2.cc?revision=9342&view=markup&pathrev=9492

333  double 
334  LMP2::compute_ecorr_lmp2() 
335  { 
336  Timer tim("ecorr"); 
337  
338  sma2::Index r("r"), s("s"); 
339  sma2::Array<0> ecorr; 
340  double ecorr_lmp2 = 0.0; 
341  for (my_occ_pairs_t::const_iterator iter = my_occ_pairs_.begin(); 
342  iter != my_occ_pairs_.end(); 
343  iter++) { 
344  sma2::Index i(iter->first-nfzc_); 
345  sma2::Index j(iter->second-nfzc_); 
346  if (j.value() > i.value()) continue; 
347  double f; 
348  if (i.value() != j.value()) f = 2.0; 
349  else f = 1.0; 
350  ecorr.zero(); 
351  ecorr() += f * 2.0 * K_2occ_(i,j,r,s) * T_local_(i,j,r,s); 
352  ecorr() -= f * K_2occ_(i,j,s,r) * T_local_(i,j,r,s); 
353  ecorr_lmp2 += ecorr.value(); 
354  } 
355  
356  msg_->sum(ecorr_lmp2); 
357  
358  return ecorr_lmp2; 
359  } 
+0

¿Se puede publicar un ejemplo de código (en cualquier idioma)? – Emil

2

El ejemplo más obvio es una lista de espacios de voxel ... 3 + 1 = 4 dimensiones :)

2

Una matriz que contiene todas las mazmorras en Ultima III lógicamente sería una matriz de 4 dimensiones. Cada mazmorra es una grilla de celdas tridimensional, y todas tienen el mismo tamaño.

Cuestiones relacionadas