list object has no attribute ZScan_GEE資料型別—Dictionary,List,Array
技術標籤:list object has no attribute ZScan
文字和數字的功能是進行描述和資料儲存,而Dictionary,List和Array可以看作是文字和數字間通過不同結合形式而形成的新的資料型別。簡單的說,Dictionary,List和Array是擁有了一定“格式”的文字或數字
1 Dictionary
//建立一個字典變數 var Dictionary_Profile = ee.Dictionary( { Name: 'Mary', Gender: 'Female', Age: '> 30', Location: 'Beijing' } ); //冒號左邊是關鍵詞(Key),它就是變數,所以不需要加引號,冒號右邊是關鍵詞對應的內容(content) //有相同 Key 字典變數組合後 true 在合併的字典中就會將重複的內容保留為第二個變數的值,false反之 var Dict_Combine = Dict_1.combine( Dict_2, true ); //字典內容更改 var Dict_Change = Dict_1.set('Age', '<30' ); //字典管檢測陳列 var List_Keys= Dict_1.keys( ); print( List_Keys); var The_Name = Dict_1.get('Name' );//單欄位資訊讀取 var The_Values = Dict_1.values(['Name','Age','Location' ]);//多欄位查詢 var The_Contain = Dict_1.contains('Hight');//查詢括號內的關鍵詞是否存在於字典 var The_Size = Dict_1.size();//尺寸查詢
2 List
List主要用來儲存一系列資料,這些資料可以由不同的格式(比如數字,文字,字典等)組成。我們可以把List理解為“資料夾”,用來在GEE的程式碼中儲存各種資料。
List內部通過逗號“,”來分割空間,同時其中的每一個空間都可以用來儲存任意資料格式(包括遙感影象和向量檔案)的資料
var List_Example = ee.List( [1,2,3,'A','B','C',['Hello','Good','Bye']] ); //第7個位置(編號為6的位置是第七位)是另一個List var List_Repeat = ee.List.repeat( 'Yeah!', 5 );//重複建立List var List_Sequence= ee.List.sequence( 0, 9, 1 , null );//等差建立List //分別代表等差數列的“首部數字”,“尾部數字”,“公差”和“項數”,其中“公差”和“項數”只能存在一個 ///藉助Docs查詢 var List_1 = ee.List( [1992,01,20,'No.1'] ); var List_2 = List_1.set(0,1993);//兩個引數分別表示“改寫位置”和“改寫內容” var List_3 = List_1.set(-1,'No.2');// var List_2 = List_1.replace(01,05);//替換第一個出現的01 var List_3 = List_1.replaceAll(01,05);//替換所有 var List_2 = List_1.add('Male');//末尾新增 var List_3 = List_1.insert(3,'Chongqing');//第四個位置插入 var List_1 = ee.List( [1992,01,20,'No.1']);//對應位置的元素打包到子陣列中 var List_2 = List_1.zip(['Year','Month','Day']); var List_Reverse = List_1.reverse( );//元素位置倒轉 var List_Rotate = List_1.rotate(5);//以List_1的對稱中心為中點進行180度翻轉 var List_Sort = List_1.sort( );//排序 var List_2 = List_1.swap( 5,8 );//交換位置處元素 var List_2 = List_1.flatten( );//將List中的元素鋪平到一位列表中 var List_1 = ee.List([1,1,2,2,3,3,4,4,5,5]) var List_2 = List_1.get(3); var List_3 = List_1.remove(3);//刪除第三個元素 var List_4 = List_1.removeAll([3,4]);//刪去所謂值為3和4的元素 //判斷等於與包含 var True_False_1 = List_1.equals( List_2 ); var True_False_2 = List_1.contains('li'); var True_False_3 = List_1.containsAll(List_3); //5在List中出現的頻率 var Frequency_Number = List_Number.frequency(5) //Do是一個函式 var List_2 = List_1.map( Do ); //尺寸計算 相同 var Length_Number_1 = List_1.size( ); var Length_Number_2 = List_1.length( );
理解.map命令的作用是對List中的每一個物件(Object)都執行了某種相同的操作,這種相同的操作由function命令進行編寫
List的迴圈命令
//求1-1000自然數的和
var List_1 = ee.List.sequence(1,1000,1);
function Do ( Number_1, Number_2 )
{ return ee.Number(Number_1).add(Number_2);
}
var List_2 = List_1.iterate( Do, 0 );
print( List_1, List_2 );
理解.iterate()命令有兩個引數,第一個引數是執行迴圈要執行的引數方程,第二個是迴圈的初始量就行。
3 Array
“陣列,陣列,矩陣”,其本質上仍屬於List的範疇。作為高階遙感分析中的核心資料格式(使用Array會靈活很多),可以這樣理解Array:“帶有方向的List”,同時應該注意這種List只能由數字構成。
把方括號外的(List間)逗號想象成換行鍵按下後的效果
var Array_1 = ee.Array( [[1], [2], [3]]); //3*1
var Array_2 = ee.Array( [[1, 2, 3]]); //1*3
print( Array_1,Array_2 );
var Array_1 = ee.Array.identity( 5 );//單位矩陣 對角線為1 其餘為0
矩陣的重複
.repeat( , )的作用是將原矩陣沿著某個方向重複若干次,其中第一個引數是重複方向,第二個引數是拷貝個數。
var Array_1 = ee.Array([ [ 1,2,3 ],[ 4,5,6 ] ]);
var Array_2 = Array_1.repeat( 1,2 );
矩陣的掩膜命令
var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] );
var Array_2 = ee.Array( [ [ 0],[ 0],[ 1],[ 0]] );
var Array_3 = Array_1.mask( Array_2 );
print( Array_1, Array_2, Array_3 );
矩陣的倒置命令
var Array_1 = ee.Array( [ [111,111,111],
[222,222,222] ]);
var Array_2 = Array_1.transpose();
var Array_3 = Array_2.transpose()
print( Array_1, Array_2,Array_3);
矩陣的資料轉換
var Array_1 = ee.Array( [ [1.1, 2.2, 3.3], [4.4, 5.5, 6.6] ] );
var Array_2 = Array_1.uint8();
print( Array_1, Array_2 );
矩陣的比較
相等處的元素為1,不等為0
var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] );
var Array_2 = ee.Array( [ [1,2],[3,4],[4,3],[2,1]] );
var Array_3 = Array_1.eq( Array_2 );
print( Array_1, Array_2, Array_3 );
矩陣的交併
var Array_1 = ee.Array( [ [1,0],[0,0],[3.14,1.41]] );
var Array_2 = ee.Array( [ [1,2],[0,0],[3,4]] );
var Array_and = Array_1.and( Array_2 );
var Array_or = Array_1.or( Array_2 );
print( Array_1, Array_2, Array_and, Array_or );
矩陣的函式命令(類似的命令參照Number部分)
var Array_1 = ee.Array( [-3.14, 1.414] );
var Array_2 = Array_1.ceil().abs();
矩陣的數學命令(位運算 移位等類似參照number,不過是多了幾行幾列的元素)
var Array_1 = ee.Array( [ [1,2,3,4] ] );
var Array_2 = ee.Array( [ [5,6,7,8] ] );
var Result_Array = Array_1.add(Array_2);
print ( Array_1, Array_2, Result_Array );
參考:
由王金柱(西南大學&迪肯大學)創作