簡介
數組通常採用整數來作下標,在多維數組之中採用一系列有序的整數來標註,如在[ 3,1,5 ] ,這種整數列表之中整數的個數始終相同,且被稱為數組維數。關於每個數組維度的邊界稱為“維”。維度為 k的數組通常被稱為 k維。默認數組維數即在定義數組大小時,使用系統或庫函式已經定義好的數組維數。在很多方面都有套用,如在資料庫中,返回有關查詢操作;在機器學習中,分類問題和維數約簡,都有用到默認數組維數。
數組類型
數組類型變數採用如下方法表示,即一個基類型後面帶有空的中括弧[ ]。還有一種做法,Java接受C風格的聲明,即在數組名後可以放置中括弧。
以下聲明是等價的:
int [ ] arrayOfInts;
int arrayOfInts [ ];
無論哪一種情況,array Of Ints均聲明為一個整型數組。此數組的大小尚不可知,因為我們只定義了數組類型變數。至此還沒有創建此數組類的一個具體實例,即沒有為之關聯存儲空間。聲明一個數組類型變數時指定數組的長度甚至是不可能的。
對象數組可以採用同樣的方式創建:
String [ ] someStrings;
Button someButtons [ ];
數組創建和初始化
new操作符用於創建一個數組的實例。在new操作符之後,我們指定了數組的基類型,並用一個中括弧括起的表達式來指定數組的長度:
arrayOfInts = new int [42];
someStrings = new String [ number + 2 ];
當然也可以將聲明和分配數組的步驟合二為一:
double [ ] someNumbers = new double [20];
Component widgets [ ] = new Component [12];
與C中一樣,數組以0作為起始索引。因此,someNumbers[ ]的第一個元素索引 為0,最後一個元素的索引為19。在創建之後,數組元素會初始化為其類型的默認值。對於數字類型,這說明這些元素都將初始化為0:
int [ ] grades = new int [30];
grades[0] = 99;
grades[1] = 72;
// grades[2] == 0
對象數組的元素是對象的引用,而不是對象的具體實例。每個元素的默認值因而為 null,直到我們為其賦以適當對象的實例為止:
String names [ ] = new String [4];
names [0] = new String();
names [1] = “Boofa”;
names [2] = someObject.toString();
// names [3] == null
這裡有一個重要的區別,它可能會導致混淆。在許多其他語言中,創建數組的操作與為其元素分配存儲空間的操作完全相同。在Java中,一個新分配的對象數組實際上只包含引用變數,而且每個值都是null。這並不是說,一個空數組就沒有相關的存儲空間;在此需要空間來保存這些引用(數組中的空“槽”)。
維數約簡
維數約簡又稱為降維,是機器學習的一種必要手段。若資料庫X是屬於n維空間的,通過特徵提取或者特徵選擇的方法,將原空間的維數降至m維,要求n遠大於m,滿足:m維空間的特性能反映原空間數據的特徵,這個過程稱之為維數約簡。
維數約簡是相對於維數災難或者說是高維數據來提出的,很明顯,其意義就是降低原來的維數,並保證原資料庫的完整性,在約簡後的空間中執行後續程式將大大減少運算量,提高數據挖掘效率,且挖掘出來的結果與原有數據集所獲得結果基本一致。更廣泛的說就是防止了維數災難的發生。