使用NumPy Numba的簡單使用 二

2021-09-28 11:31:59 字數 3220 閱讀 6607

本來要寫nlp第三課動態規劃的,日了,寫到一半發現自己也不會了,理論很簡單,動態規劃咋回事也知道,但是實現在原始碼上還是有點難度,現在簡單給予題目描述,小夥伴也可以來思考一下,例題一,我們現在有1元硬幣,2元硬幣,5元硬幣和10元硬幣。我們要將m金額的錢換為硬幣,保證硬幣數目最少,我們的換法是什麼,例題二,我們現在有m公尺的繩子,截成n段(n的長度一定為整數),將n段繩子的長度相乘,保證乘積結果為最大值,我們需要擷取,過幾天再回頭來寫這個吧。我們今天來繼續說說numpy的用法,這次我們通過習題來看看numpy的用法。

問題:將arr中的所有奇數替換為-1,而不改變arr。(提示where)

arr = np.arange(10) 

out = np.where(arr % 2 == 1, -1, arr)

where語法為,引數一是條件,引數二是滿足條件的要替換為什麼,引數三是輸入array。

問題:將一維陣列轉換為2行的2維陣列,給定:np.arange(10)

arr = np.arange(10) 

out = np.reshape(2,-1)

reshape語法為(行,列)若引數二列為-1,為不限制
問題:垂直堆疊陣列a和陣列b,給定:a = np.arange(10).reshape(2,-1) b = np.repeat(1, 10).reshape(2,-1) 期望的輸出:

-array([[0,-1,-2,-3,-4],">> array([[0, 1, 2, 3, 4],

--------[5,-6,-7,-8,-9],">> [5, 6, 7, 8, 9],

--------[1,-1,-1,-1,-1],">> [1, 1, 1, 1, 1],

--------[1,-1,-1,-1,-1]])">> [1, 1, 1, 1, 1]])

a = np.arange(10).reshape(2,-1)

b = np.repeat(1, 10).reshape(2,-1)

np.concatenate([a, b], axis=0) #

方法一np.vstack([a, b]) #

方法二np.r_[a, b] #

方法三

方法一:concatenate語法是引數一列表,axis=0為縱向堆疊,1位橫向

方法二:vstack垂直堆疊,擴充套件hstack為橫向。

方法三:r_垂直堆疊,擴充套件c_為橫向。

問題:建立以下模式而不使用硬編碼。只使用numpy函式和下面的輸入陣列a。

給定:

a = np.array([1,2,3])` 期望的輸出:

a = np.array([1,2,3])

np.r_[np.repeat(a, 3), np.tile(a, 3)]

說明:np.repeat(a, 3)獲得到array([1, 1, 1, 2, 2, 2, 3, 3, 3]),np.tile(a, 3)獲得到array([1, 2, 3, 1, 2, 3, 1, 2, 3]),然後應r_進行堆疊

問題:獲取陣列a和陣列b之間的公共項。ab的交集

np.intersect1d(a,b)

問題:從陣列a中刪除陣列b中的所有項。給定:a = np.array([1,2,3,4,5]) b = np.array([5,6,7,8,9]) 期望的輸出:>array([1,2,3,4])

a = np.array([1,2,3,4,5]) 

b = np.array([5,6,7,8,9])

np.setdiff1d(a,b)

setdiffld使用時注意順序,在第乙個引數內除去包含第二個元素的資料,且不包含剩餘第二個引數的元素。(可能有點繞嘴)。

問題:獲取a和b元素匹配的位置。 

a = np.array([1,2,3,2,3,4,3,4,5,6]) 

b = np.array([7,2,10,2,7,4,9,4,9,8])

np.where(a==b)

問題:獲取5到10之間的所有專案。

a = np.array([2, 6, 1, 9, 10, 3, 27]) 

index = np.where((a >= 5) & (a <= 10))

a[index]

問題:在陣列arr中交換行1和2。

arr = np.arange(9).reshape(3,3) 

arr[[1,0,2],:]

問題:在陣列arr中交換列1和2。

arr = np.arange(9).reshape(3,3) 

print

(arr)

arr[:, [1,0,2]]

問題:反轉二維陣列arr的行。

arr = np.arange(9).reshape(3,3)

arr[::-1]

問題:反轉二維陣列arr的列。

arr = np.arange(9).reshape(3,3)

arrarr[:, ::-1]

問題:建立乙個形狀為5x3的二維陣列,以包含5到10之間的隨機十進位制數。

arr = np.arange(9).reshape(3,3)

#solution method 1:

rand_arr = np.random.randint(low=5, high=10, size=(5,3)) + np.random.random((5,3))

#print(rand_arr)

#solution method 2:

rand_arr = np.random.uniform(5,10, size=(5,3))

print(rand_arr)

這裡需要詳細說明一下,arr[a,b] 也就是arr的切片例如:a[2:7:2]# 從索引 2 開始到索引 7 停止,間隔為 2,而在我們的二維陣列中,我們可以使用『,』;例如a[x,m],這時我們就取出,第x+1行的第m+1個元素。

還有:和,還有...並用的。我們來看乙個例子,:也就是所有,例如a[:,2]就是我們要取出管他多少行的第三列所有。同事a[2,:]也是如此,第二行的所有,管他多少列呢。

我們上面說的::n兩個冒號連線在一起就是從第:個元素,取到第:個元素,步長是n,::也就是說取得所有吧。步長為負數時會反轉。下期我們繼續說說nump的用法吧~!

vcbuild的簡單使用

vcbuild 命令列 更新 2007 年 11 月 vcbuild 工具使用以下命令列語法來生成 visual c 專案和解決方案。複製 vcbuild options project solution config all 標誌 options生成選項。有關更多資訊,請參見 vcbuild 選項...

QList的簡單使用

qlistlist list 1 2 3 4 5 6 7 8 qlist的插入 voidinsert int i,const t value 在qlist其中某個位置插入value,假如沒 宣告i i 預設size 及在最後插入value iteratorinsert iterator before...

QTreeWidget的簡單使用

qtreewidget是一種樹形的部件,它以樹的形式顯示各個項,它的每個項使用qtreewidgetitem來表示。qtreewidgetitem的值的表示都是用qstringlist來表示的。簡單的說明一下 for int i 0 i 3 i for int i 0 i 3 i treewidge...