# Numpy #7 陣列結構 ## NP 資料型別 ![](https://i.imgur.com/OHCW4Cv.png) 指定各欄位的資料型別 變數dt = np.dtype('N0, N1, N2, ...') N0 N1...各自代表這些欄位的型別 可以用上表的字母部分顯示 例如f8代表8bytes float(float64);U5代表長度5以下的unicode 也可以用上表的NP通用型別 例如np.int32 讀取文檔的時候,上面變數dt就可以用參數dtype=dt指定 例如 a = np.genfromtxt('test.txt', delimiter=',', dtype=dt) ## 結構化陣列 可用指定dic的方式 舉例: 原始資料 test.txt Jay,1,2,Yes,87% James,3,4,No,3% Joe,5,6,Yes,55% dt = np.dtype({'names':('Name', 'num1', 'num2', 'True'), 'formats':((np.str_, 5), np.int32, int, 'U3')}) 前半代表欄位名稱,後半則分別指定類別(上表都可混用) 整理資料可輸入 b = np.genfromtxt("test.txt", delimiter=',', dtype=dt) 可用索引提取資料,例如 b[0]代表第一列資料 b['name']則提取該欄位名稱的資料 或是b[0]['name']得到某列某欄位的資料 也可以加入邏輯運算,例如 b[b['num2'] >= 3]['Name']  欄位名   >=3的欄 輸出的欄位名 ## 清單餵入結構化陣列 建立3X3 zero矩陣,利用上面dt的dtype c = np.zeros(3, dtype=dt) 結果 array([('', 0, 0, ''), ('', 0, 0, ''), ('', 0, 0, '')], dtype=[('Name', '<U5'), ('num1', '<i4'), ('num2', '<i8'), ('True', '<U3')]) 清單 name = ['Chloe', 'Charlotte', 'Clara'] num_1 = [11, 12, 13] num_2 = [14, 15, 16] check = ['Y', 'Y', 'N'] 各自清單置入原來的欄位裡面 c['Name'] = name c['num1'] = num_1 c['num2'] = num_2 c['True'] = check 結果 [('Chloe', 11, 14, 'Y') ('Charl', 12, 15, 'Y') ('Clara', 13, 16, 'N')] 更多可以參考: https://numpy.org/doc/stable/user/basics.rec.html ###### tags: `資料分析` `numpy` `python`