1. 程式人生 > 其它 >list object has no attribute ZScan_GEE資料型別—Dictionary,List,Array

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()命令有兩個引數,第一個引數是執行迴圈要執行的引數方程,第二個是迴圈的初始量就行。

61f54d32b7a16a72c8c02365f35e5c95.png

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( , )的作用是將原矩陣沿著某個方向重複若干次,其中第一個引數是重複方向,第二個引數是拷貝個數。

dd9298952e039d1a0e6adf8fb0012504.png
矩陣重複
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 );

e23b77db350aad8682281de2fcc46999.png

矩陣的倒置命令

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);

0b44f4d233acd309c3fc549489f40f9d.png

矩陣的資料轉換

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 );

f2672d7175d4f92ff9efd5259514d506.png

矩陣的比較

相等處的元素為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 );

78dfb21b666f798dab9d87bfba6e728a.png

矩陣的交併

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 );

dceeb02c4361a468b552fa0d9492b147.png

矩陣的函式命令(類似的命令參照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 );

b358529231c1b748a2cdf7893c155eec.png

eeb8852c85592dad49b23d806673ad6e.png

參考:
由王金柱(西南大學&迪肯大學)創作