2010-11-19 46 views
6

例如:一個二維數組可以像方磚一樣的磚牆顯示,其中每個磚代表我們數組中的一個座標。一個三維數組可以用相同的方式可視化爲一個盒子或立方體。C#/ C++:如何可視化多維數組

但是,這裏是棘手的部分,你如何可視化一個具有多個(多於3個)維度的數組?或者,對於那部分,您如何將一個數組可視化爲不僅具有多個維度,而且具有多個維度的多個維度?

例如:你如何可視化一個這樣的數組:Array [3,3,3,3] [3,3] [3,3,3,3,3] [3]?

+3

您的數組給出4x2x ....> 100個維度。即使弦理論只給出10或12維! – xandy 2010-11-19 00:28:54

+3

@xandy:物理詞是一個特別差的比喻。 *從一點到幾百兆字節,從微秒到半小時的計算會讓我們以10 \ * \ * 9的完全莫名其妙的比率!程序員處於獨特的地位,他是唯一的學科和專業,在這個學科和專業中,如此巨大的比例,完全阻礙了我們的想象力,必須通過單一技術彌合。他必須能夠從概念層次上進行思考,這比以往任何時候需要面對的單一思維都要深刻得多。* - EW Dijkstra – 2010-11-19 00:33:29

+0

@Fred,儘管純數學家可能會認爲像@ xandy的類比物理世界:) – 2010-11-19 00:44:02

回答

9

你如何形象化數組真的取決於他們的實際使用。如果你使用數組作爲空間關係,那麼你可以將它想象成一個立方體,但你也失去了想象超過3個維度的需要。如果你真的想要實現第四個時間維度,你可以想象隨着時間的推移,你的內容隨着內容的變化而變化。

否則,您可能正在跟蹤強相關的記錄。也許每個第一元素是一個星系,二級元素是星團,第三級元素是太陽系,第四級元素是行星,第五級元素是大陸...

在這種情況下,你可以想象它是數組中的數組。如果你需要一個4維數組,那麼你可以想象一個多維數據集,但是每個子多維數據集實際上是一個一維數組。

如果您需要一個5維數組,那麼您可以想象一個立方體,但是每個子立方體都被劃分爲您的「磚牆」示例。

6維是一個立方體,每個子立方體都是自己的分立方體。

這往往會在6維後崩潰。除此之外,通常還有一個更實際的理由,即你需要這麼多維度。例如,像eHarmony這樣的網站通過在20多維空間上使用普通幾何來進行匹配。 「幽默」有一個維度,「好看的」一個維度,「購物之戀」的維度之一......然後你可以帶兩個人並應用距離公式(每個維度差異的平方,加上這些差異,平方根)並確定兩個人的兼容程度。所以如果一個人在我們的9維個性矩陣上得分爲「5,3,9,2,8,4,7,3,1」,另一個得分爲「9,3,7,1,8,2,8,4 ,7「那麼你的兼容性是:

sqrt((5-9)^2+(3-3)^2+(9-7)^2+...) 

這可以適用於無限維度,仍然工作。但是,由於這些尺寸不適用於空間,因此不需要將它們可視化。相反,在這種特殊情況下,我們實際上可以將它想象爲一個具有多個整數值的單維數組。我們可以簡化這個數組的原因是,我們的多維數組只包含一個「1」,其餘的都是「0」(表示該數組中的人的位置)。

擺脫eHarmony的例子,重點在於 - 在一定數量的維度之後,您通常對數組有實際意義,因爲它有助於感知它的方法。

+0

非常有趣,加上一個給你我的朋友用這樣一個有趣的答案回答這樣一個問題。 – 2010-11-19 00:59:48

4

你不知道。很少有甚至需要超過2或3個維度。如果你需要的不僅僅是這些,那麼也許額外的維度應該被建模爲一個對象的屬性,在這種情況下,你可以將它們看作屬性,而不是試圖想象一些神話般的超立方體。

+1

當然,我知道並且明白,你不需要(或者用於這個問題)那個大陣列。但是,這樣的極端維度的想法是相當莫名其妙的,更不用說它是多麼有趣的討論。不太重要的一點是,你用這個答案讓我的一天,謝謝你! – 2010-11-19 00:44:21

+0

@馬庫斯:好的,就是這樣。它*是*莫名其妙。有時試圖想象這種事情很有趣,但它不實際。很高興你喜歡我的回答:) – mpen 2010-11-19 07:21:58

1

超過3個維度,您唯一的選擇是樹視圖或向下鑽取。

5

有些人可以爲n> 3精神建模n維幾何圖形,至少就簡單形狀而言,有些人不能。 (當我最近與某個領域的高級n維幾何學家交談時,我發現他無法想象超立方體,而我卻可以發現他的數學超出了我),我感到非常驚訝。

雖然這並不是必要的。事實上,將笛卡爾座標變換爲二維數組並非特別必要 - 當您在實踐中使用二維數組時,您對每個座標軸都有一定的目的,並且該目的快速變得比任何視覺表示都更重要。

如果您確實需要,那麼可以考慮二維數組也可以被認爲是一維有序的一維結構。同樣,一個3維數組可以被認爲是二維結構的有序集合,或者是一組1維的集合(這些集合具有相同的大小 - 允許不同大小移動成鋸齒狀陣列)。

因此,4維數組可以被認爲是3維結構的有序集合,依此類推。

0

將4D數組可視化爲一維立方體的一維數組。一個5D數組作爲立方體的二維數組。並且將6D陣列當作立方體的3D陣列或立方體的立方體。一個7D陣列作爲一維立方體的一維數組等等......

0

忽略這些尺寸是否需要,爲什麼不只是將4D陣列想象成一維數組(線)的「立方體」。 (即:每個元素指向3D立方體的一維數組)。這可以根據需要放大(即:每個元素指向立方體的2D表面)。這當然不是超立方體如何「看起來」,但這不是必需的。

0

凸片:) 3個維數據的

分頁讓你4米的尺寸,翼片的翼片給你Ñ維。

這不一定是想象它的最佳方式。也不適合在任何尺寸中旋轉。

但隨後,這取決於你想什麼想象

RGB例如可以變成2D地圖,然後投射到一個立方體,給你4D信息

1

覺得每一個額外的維度作爲一個「封閉盒子」。將2D陣列想象爲1D陣列的陣列,將3D陣列看作2D陣列的陣列等等。

下面是一些例子...

1D 1x2的陣列:

[ 1, 2 ] 

2D 2×2陣列:

{ [ 1, 2 ], [ 3, 4 ] } 
{ [ 5, 6 ], [ 7, 8 ] } 

3D 2x2x2的數組:

({ [ 1, 2 ], [ 3, 4 ] }, { [ 5, 6 ], [ 7, 8 ] }) 
({ [ 9, 0 ], [ 1, 2 ] }, { [ 3, 4 ], [ 5, 6 ] }) 
3

嘗試是減去它。如果你需要想象一個十維數組,那麼首先想象所有有限非負整數n的所有n維實值歐幾里德向量空間的集合。 {R0,R1,R2,...}

現在想象幾乎所有這些,只留下R10。

現在想象一下幾乎所有的東西,這樣你就只剩下R10中的整數格點了。

現在想象幾乎所有這些,以便您只有一個超矩形子集的整數格點。

你完成了;這是一個10維陣列的良好可視化。當你將它看作所有可能的n維向量空間集合的一個子集時,它確實非常小。

如果高維空間的主題感興趣的內容,你可能想要看我的溫柔介紹有關搜索算法對高維向量空間數據庫的一些有趣的事實:

http://blogs.msdn.com/b/ericlippert/archive/tags/high+dimensional+spaces/

2

有許多可視化多維數據的方式。我最喜歡的是阿爾弗雷德島山的Parallel Coordinates,這表示每個維度作爲縱軸,而每個數據點作爲一個線程將它們連接所有:

alt text

另一個偉大的可視化是拉瑪納饒Table Lens (pdf)

alt text

這將每個維表示爲一列,如電子表格中的圖形,而不是數字。它特別擅長顯示尺寸之間的相關性;當你按一個維度排序時,很容易看出相關維度如何排列在一起。

0

不想在這裏放棄農場,但這是我如何看待PHP中的多維數組的示例。

$圖[資訊] [X] [Y] [Z] [ID] [photopath] [標誌1] [FLAG 2]

我想象它會是什麼樣子在3D空間中的點,然後我只需添加排序屬性。在這裏,假設你正在玩Doom 3.每張地圖都可以分割成多個房間,這些房間的像素有x,y和z座標。每個點都可以有一個與之關聯的對象ID(怪物,物品等)。我爲我的應用程序添加了更多屬性,但基本上這是它。陣列中的點不一定必須是幾何精確的;它可以有任何意義。這與其他人的做法是否相似,我不知道。我知道使用gd圖形庫將爲飛行中的多維數組創建一個很好的可視化工具,但是我上次爲該客戶端工作時沒有找到該項目。

0

你可以想象一個財務報告作爲一個數組,其中數據是從多個實體進來以電子表格形式:

  • 銷售數據的一個電子表格將是一個二維數組(例如本季度每個利潤中心每個月的銷售額);
  • 工作簿中的多個選項卡(每個子公司都有一個選項卡)將是3D數組;

然後,出於全局整合的目的,Controller可能會從每個區域接收一個工作簿 - 這將是第四個維度。如果您需要隨時間操縱銷售數據(例如發現趨勢),第五個維度可能是「時間」。

理論上,您可以在一個5D數組變量中保存多年,多區域的銷售數據。

正如人們在上面所說的,你真的需要首先有一個應用程序,然後邏輯數據結構將有助於定義一個合適的物理形式。任何可以關聯建模的屬性集都可以正常放入數組中。

tony