1. 程式人生 > 遊戲攻略 >《原神攻略》1.5版0命鍾離隊伍配置參考

《原神攻略》1.5版0命鍾離隊伍配置參考

百度網盤(.md檔案以及.ipynb檔案)提取碼:a0bx

目錄

1.1 認識NumPy陣列物件

import numpy as np  #匯入numpy包
data=np.arrange(12).reshape(3,4)  # 建立一個3行4列的陣列
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-2-3f54680f24d6> in <module>
----> 1 data=np.arrange(12).reshape(3,4)  # 建立一個3行4列的陣列


D:\Anacanda\lib\site-packages\numpy\__init__.py in __getattr__(attr)
    212                 return Tester
    213             else:
--> 214                 raise AttributeError("module {!r} has no attribute "
    215                                      "{!r}".format(__name__, attr))
    216 


AttributeError: module 'numpy' has no attribute 'arrange'
data=np.arange(12).reshape(3,4)  # 建立一個3行4列的陣列
data
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
type(data)

numpy.ndarray
data.npim
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-6-80cde699d9bc> in <module>
----> 1 data.npim


AttributeError: 'numpy.ndarray' object has no attribute 'npim'
data.ndim  #檢視陣列的維度,2表示時二維陣列
2
data.shape  # 陣列的維度,輸出結果(3,4),表示3行4列
(3, 4)
data.size  # 陣列的元素個數
12
data.dtype  # 陣列元素的型別,輸出結果dtype('int32'),表示元素型別都是int32
dtype('int32')

1.2 建立NumPy陣列

import numpy as np
data1 = np.array([1,2,3])  # 建立一個一維陣列
data1
array([1, 2, 3])
data2 = np.array([[1,2,3],[4,5,6]])  # 建立一個二維陣列
data2
array([[1, 2, 3],
       [4, 5, 6]])
data3 = np.zeros((3,4))  #建立一個3行4列的全零陣列
data3
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
data4 = np.ones((3,4))  #建立一個3行4列的全1陣列
data4
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
data5 = np.empty((5,2))  # 建立全空陣列,其實每個值都是接近於零的數
data5
array([[1.10993472e-311, 1.82804289e-322],
       [0.00000000e+000, 0.00000000e+000],
       [6.79038653e-313, 1.16095484e-028],
       [4.26231948e-096, 9.78750380e+199],
       [6.97843734e+252, 1.47917289e-071]])
data6 = np.arange(1,20,2) #建立陣列從 1--19,不包括20,步長為2.
data6
array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19])
data7 = np.array([1,2,3],float) #建立浮點型陣列
data7
array([1., 2., 3.])
data8 = np.array([1,2,3],dtype = 'int32') #建立一個元素型別為 int32 的陣列
data8
array([1, 2, 3])

1.3 ndarry物件的資料型別

1.3.1 檢視資料型別

data9 = np.array([[1,2,3],[4,5,6]])
data9
array([[1, 2, 3],
       [4, 5, 6]])
data9.dtype #檢視資料型別
dtype('int32')
data9.dtype.name #檢視資料型別
'int32'

1.3.2 轉換資料型別

data9
array([[1, 2, 3],
       [4, 5, 6]])
int_data9 = data9.astype(np.int32) #將陣列 data9 轉換為 int32 型別
int_data9
array([[1, 2, 3],
       [4, 5, 6]])
float_data9 = int_data9.astype(np.float64) #將陣列 int_data9 轉換為 float64 型別
float_data9
array([[1., 2., 3.],
       [4., 5., 6.]])
str_data9 = float_data9.astype(np.str) #將陣列 float_data9 轉換為 str 型別
str_data9
array([['1.0', '2.0', '3.0'],
       ['4.0', '5.0', '6.0']], dtype='<U32')

1.4 陣列運算

1.4.1向量化運算

data10 = np.array([[1,2,3],[4,5,6]])
data10
array([[1, 2, 3],
       [4, 5, 6]])
data11 = np.array([[4,5,6],[1,2,3]])
data11
array([[4, 5, 6],
       [1, 2, 3]])
data10 + data11  # 陣列相加 相同位置元素相加
array([[5, 7, 9],
       [5, 7, 9]])
data10 * data11 #陣列相乘 相同位置元素相乘
array([[ 4, 10, 18],
       [ 4, 10, 18]])
data10 - data11  # 陣列相減 相同位置元素相減
array([[-3, -3, -3],
       [ 3,  3,  3]])
data10 / data11  # 陣列相除 相同位置元素相除
array([[0.25, 0.4 , 0.5 ],
       [4.  , 2.5 , 2.  ]])

1.4.2 陣列廣播

當兩個陣列的(行數,列數)不一樣的時候,就會自動觸發廣播機制。

data12 = np.array([[0],[1],[2]])
data12 #3行1列
array([[0],
       [1],
       [2]])
data13 = np.array([0,1,2])
data13 #1行3列
array([0, 1, 2])
data12 + data13
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])

原理如下圖所示:

在這裡插入圖片描述

1.4.3 陣列與標量間的運算

data9
array([[1, 2, 3],
       [4, 5, 6]])
num = 10

陣列與標量間的運算,標量會與陣列的每一個元素,進行運算。

data9 + num 
array([[11, 12, 13],
       [14, 15, 16]])
data9 * num
array([[10, 20, 30],
       [40, 50, 60]])
data9 - num
array([[-9, -8, -7],
       [-6, -5, -4]])
data9 / num
array([[0.1, 0.2, 0.3],
       [0.4, 0.5, 0.6]])

1.5 ndarray的索引和切片

1.5.1 整數索引和切片的基本使用

data14 = np.arange(8)
data14
array([0, 1, 2, 3, 4, 5, 6, 7])
data14[5] # 獲取索引為5的元素
5
data14[3:5] # 獲取索引為3~5的元素,但不包括5
array([3, 4])
data14[1:6:2]  # 獲取索引為1~6的元素,步長為2
array([1, 3, 5])
data15 = np.array([[1,2,3],[4,5,6],[7,8,9]])
data15
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
data15[1] # 獲取索引為1的元素
array([4, 5, 6])
data15[0][1] # 獲取位於第0行第1列的元素
2
data15[:2] #獲取0,1兩行的元素
array([[1, 2, 3],
       [4, 5, 6]])
data15[:2,:2] #獲取行號為0,1;列號為0,1的元素
array([[1, 2],
       [4, 5]])
data15[1,:2]  #獲取行號為1;列號為0,1的元素
array([4, 5])

1.5.2 花式(陣列)索引的基本使用

data16 = np.empty((4, 4))               # 建立一個空陣列
for i in range(4):
    data16[i] = np.arange(i, i + 4)   # 動態地為陣列新增元素
data16
array([[0., 1., 2., 3.],
       [1., 2., 3., 4.],
       [2., 3., 4., 5.],
       [3., 4., 5., 6.]])
data16[[0,2]] # 獲取 第零行、第兩行 的元素
array([[0., 1., 2., 3.],
       [2., 3., 4., 5.]])
data16[[1,3],[1,2]] # 獲取索引為(1,1)和(3,2)的元素
array([2., 5.])

1.5.3 布林型

student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])  # 儲存學生姓名的陣列
student_name
array(['Tom', 'Lily', 'Jack', 'Rose'], dtype='<U4')
student_score = np.array([[79, 88, 80], [89, 90, 92], [83, 78, 85], [78, 76, 80]])  # 儲存學生成績的陣列
student_score
array([[79, 88, 80],
       [89, 90, 92],
       [83, 78, 85],
       [78, 76, 80]])
student_name == 'Jack' # 對student_name和字串“Jack”通過 == 運算子產生一個布林型陣列
array([False, False,  True, False])
# 將布林陣列作為索引應用於儲存成績的陣列student_score,
# 返回的資料是True值對應的行
student_score[student_name=='Jack']
array([[83, 78, 85]])
student_score[student_name=='Jack',:1] #獲取Jack的第一門課程成績。
array([[83]])

1.6 陣列的轉置和軸對稱

transpose和swapaxes的用法,詳見:該部落格

data17 = np.arange(12).reshape(3,4)
data17
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
data17.T  # 使用T屬性對陣列進行轉置
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
arr = np.arange(16).reshape((2, 2, 4)) #建立一個2*2*4的三維陣列。
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr.T #此時T已經失效
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])
arr.transpose(1,2,0)
array([[[ 0,  8],
        [ 1,  9],
        [ 2, 10],
        [ 3, 11]],

       [[ 4, 12],
        [ 5, 13],
        [ 6, 14],
        [ 7, 15]]])
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr.swapaxes(1, 0)
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
arr.transpose(1,0,2)
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

1.7 NumPy通用函式

data18 = np.array([1,4,9,16])
data18
array([ 1,  4,  9, 16])
np.sqrt(data18) #開方
array([1., 2., 3., 4.])
np.abs(data18) #取絕對值
array([ 1,  4,  9, 16])
np.square(arr) #求平方
array([[[  0,   1,   4,   9],
        [ 16,  25,  36,  49]],

       [[ 64,  81, 100, 121],
        [144, 169, 196, 225]]], dtype=int32)
x = np.array([12, 9, 13, 15])
y = np.array([11, 10, 4, 8])
np.add(x,y) # 相當於 x + y
array([23, 19, 17, 23])
np.multiply(x, y) # 相當於 x * y
array([132,  90,  52, 120])
np.maximum(x,y) # 兩個陣列元素級最大值的比較
array([12, 10, 13, 15])
np.greater(x, y)  # 執行元素級的比較操作 如果 x > y,則返回True,否則返回False
array([ True, False,  True,  True])

1.8 利用NumPy陣列進行資料處理

1.8.1 將條件邏輯轉為陣列運算

x
array([12,  9, 13, 15])
y
array([11, 10,  4,  8])
con = np.array([True,True,False,False])
result = np.where(con,x,y) #True 則返回x中的元素,False 則返回y中的元素
result
array([12,  9,  4,  8])

1.8.2 陣列統計運算

data18
array([ 1,  4,  9, 16])
data18.sum() # 求和
30
data18.mean() # 求平均值
7.5
data18.min() #求最小值
1
data18.max() #求最大值
16
data18.argmin() #最小值的索引
0
data18.argmax() #最大值的索引
3
data18.cumsum() #計算陣列的累加和
array([ 1,  5, 14, 30], dtype=int32)
data18.cumprod() #計算陣列的階乘
array([  1,   4,  36, 576], dtype=int32)
x = np.arange(1 , 16).reshape((3 , 5))
x
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])
np.diff(x,axis=0) #後一個數值減去前一個,axis=0表示按照 行 操作,不指定的話按照 列 操作。
array([[5, 5, 5, 5, 5],
       [5, 5, 5, 5, 5]])
np.diff(x,axis=1) #後一個數值減去前一個,axis=0表示按照 列 操作。
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])

取整

np.floor([-0.6,-1.4,-0.1,-1.8,0,1.4,1.7]) #向左取整
array([-1., -2., -1., -2.,  0.,  1.,  1.])
np.ceil([-0.6,-1.4,-0.1,-1.8,0,1.4,1.7]) #向右取整
array([-0., -1., -0., -1.,  0.,  2.,  2.])

查詢,利用np.where實現小於0的值用0填充嗎,大於0的數不變!

x = np.array([[1, 0],[2, -2],[-2, 1]])
print(x)
[[ 1  0]
 [ 2 -2]
 [-2  1]]
np.where(x>0,x,0)
array([[1, 0],
       [2, 0],
       [0, 1]])

1.8.3 陣列排序

data19 = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
data19
array([[6, 2, 7],
       [3, 6, 2],
       [4, 3, 2]])
data19.sort()
data19
array([[2, 6, 7],
       [2, 3, 6],
       [2, 3, 4]])
data19 = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
print(data19)
[[6 2 7]
 [3 6 2]
 [4 3 2]]
data19.sort(0) #以第零列為標準,進行排序
data19
array([[3, 2, 2],
       [4, 3, 2],
       [6, 6, 7]])

1.8.4 檢索陣列元素

data20 = np.array([[1, -2, -7], [-3, 6, 2], [-4, 3, 2]])
data20
array([[ 1, -2, -7],
       [-3,  6,  2],
       [-4,  3,  2]])
np.any(data20 > 0) # arr的所有元素是否有一個大於0
True
np.all(data20 > 0) # arr的所有元素是否都大於0
False

1.8.5 唯一化及其他集合邏輯

data21 = np.array([12, 11, 34, 23, 12, 8, 11])
np.unique(data21) #去重
array([ 8, 11, 12, 23, 34])
np.in1d(data21,[11,12]) #若陣列data21中的元素,為11或者12,返回True,否則返回False
array([ True,  True, False, False,  True, False,  True])

1.9 線性代數模組

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[1, 2], [3, 4], [5, 6]])
x.dot(y) #線性代數中 矩陣x * 矩陣y
array([[22, 28],
       [49, 64]])

1.10隨機數模組

np.random.rand(3,3) # 隨機生成一個3*3的二維陣列
array([[0.880182  , 0.80619983, 0.89338209],
       [0.95397872, 0.07484697, 0.69381484],
       [0.66932997, 0.81346976, 0.69450861]])
np.random.rand(2, 3, 3) # 隨機生成一個2*3*3三維陣列
array([[[0.6498411 , 0.73851041, 0.75853755],
        [0.26874959, 0.98528431, 0.55123651],
        [0.89348645, 0.63671576, 0.62152188]],

       [[0.19524857, 0.08290215, 0.11137754],
        [0.50801958, 0.06208007, 0.12890112],
        [0.94341486, 0.13863547, 0.37279088]]])
np.random.seed(0)  # 生成隨機數的種子
np.random.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
np.random.seed(0)  # 隨機數種子相同的話,生成的陣列也相同
np.random.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
np.random.seed(2)  # 隨機數種子相同的話,生成的陣列也相同
np.random.rand(5)
array([0.4359949 , 0.02592623, 0.54966248, 0.43532239, 0.4203678 ])