2010-09-04 92 views
5

我一直在編程在過去的8年,現在我只是想知道的,如果有任何實際用途N維數組,其中N> 3。我只能看到小於或等於3維的數據結構。在任何程序中是否有超過3維的數據結構?是否有超過3d的ND數組的實際用途?如果是這樣,請張貼一些樣本。實際使用N維數組,其中(N> 3)

+3

通常你會使用一些其他的數據結構,因爲高維數據往往是稀疏的,大部分數組將被浪費。 – starblue 2010-09-04 06:24:46

回答

2

唯一像樣的例子,我記得在1982年的文字Oh! Pascal!,它給你一些關於它在我的經歷中是多麼罕見的想法。

的例子是一個庫存保管系統,其中牛仔褲可以通過

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

其是僅稍微做作來索引。以這種方式構建的數據庫沒有問題,但它看起來很有趣。

3

幾乎所有的東西都來自物理學,張量很常見,例如廣義相對論,計算化學,量子物理學。

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

張量與秩4例如常見的。

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

你能發表一個代碼(任何語言)的樣本嗎? – Emil 2010-09-04 05:24:14

2

最明顯的例子是體素空間列表... 3 + 1 = 4個維度:)

2

在Ultima III中擁有所有地牢的陣列在邏輯上將是一個4維陣列。每個地牢都是一個三維的細胞網格,並且它們都是相同的大小。