在機器學習中為了防止模型學習到樣本順序這些影響泛化能力的特徵,通常在模型進行訓練之前打亂樣本順序。numpy模組提供了permutation(x)
和shuffle(x)
兩個亂序函式,permutation(x)
和shuffle(x)
兩個函式都在 numpy 的 random 模組下,因此要使用這兩個亂序函式需要先導入 random 模組。
permutation(x)
函式由傳入的 x 引數的型別決定功能:
無論實現哪種功能,permutation(x)
函式最終返回的都是亂序後的陣列。
import numpy as np
a = np.random.permutation(5) # x 為標量
b = np.random.permutation(np.arange(5)) # x 為陣列
b2 = np.random.permutation([1, 2, 3, 4, 5]) # x 為列表
b3 = np.random.permutation((1, 2, 3, 4, 5)) # x 為元組
>>> print(f"the type of a:, a:")
the type of a:, a:[1 4 2 0 3]
>>> print(f"the type of b:, b:")
the type of b:, b:[0 1 3 4 2]
>>> print(f"the type of b2:, b2:")
the type of b2:, b2:[1 3 5 4 2]
>>> print(f"the type of b3:, b3:")
the type of b3:, b3:[3 1 4 2 5]
當 x 為標量時只能返回範圍值為 [0, x) 亂序的一維陣列,**這是因為傳入 x 為標量,相當於對numpy.arange(x)
陣列進行亂序,因此返回的只能是一維陣列。**但是如果傳入的 x 為陣列、列表以及元組時,我們可以指定陣列、列表以及元組的維度,無論幾個維度的陣列、列表以及元組,permulation(x)
函式最終只對第乙個維度進行亂序。
import numpy as np
b = np.arange(6).reshape(3, 2) # 原始的二維陣列
# 使用亂序函式
b2 = np.random.permutation(b) # x 為二維陣列
b3 = np.random.permutation(b.tolist()) # x 為二維列表, 通過 tolist 函式將陣列轉換列表
b4 = np.random.permutation(tuple(b.tolist())) # x 為二維元組(通常不會使用), 使用 tuple 函式將列表轉換為元組
>>> print(b)
[[0 1]
[2 3]
[4 5]]
>>> print(b2)
[[4 5]
[2 3]
[0 1]]
>>> print(b3)
[[4 5]
[2 3]
[0 1]]
>>> print(b4)
[[0 1]
[2 3]
[4 5]]
這裡以陣列為例(列表和元組類似),對於二維陣列:
permulation(x)
函式對第乙個維度進行亂序,也就是axis0
的行方向。假設現在原始二維陣列為b
,亂序後的二維陣列為b2
,permulation(x)
函式是如何沿著第乙個維度進行亂序呢?
二維陣列
沿著第乙個維度進行亂序,沿著行方向進行亂序,我們將每一行都看成乙個整體,每乙個整體用相同顏色表示,不同整體用不同顏色進行區分。對第乙個維度進行亂序,相當於對這些不同顏色的整體進行亂序。
此時原始的二維陣列b = array([[0, 1], [2, 3], [4, 5]])
,是乙個 3 行 4 列的二維陣列,將每一行看成是乙個整體,可以分成[0, 1]
,[2, 3]
和[4, 5]
三個整體,對其進行亂序相當於對這三個整體進行亂序,最終的亂序結果為b2 = array([[4, 5], [2, 3], [0, 1]])
。(因為亂序是隨機的,有可能得到不同的亂序結果)
shuffle(x)
函式中的引數 x 只能是陣列或者列表(不能是元組)。shuffle(x)
函式並不返回亂序後的陣列。
import numpy as np
a = np.arange(5) # 陣列
>>> print(a) # 亂序前的 a 陣列
[0 1 2 3 4]
a2 = np.random.shuffle(a)
>>> print(a) # 亂序後的 a 陣列
[4 3 1 0 2]
>>> print(a2) # shuffle 函式不返回亂序後的陣列
none
b = [0, 1, 2, 3, 4]
>>> print(b) # 亂序前的 b 列表
[0, 1, 2, 3, 4]
b2 = np.random.shuffle(b)
>>> print(b) # 亂序後的 b 列表
[0, 3, 4, 2, 1]
>>> print(b2) # shuffle 函式不返回亂序後的陣列
none
上面的例子使用的都是一維陣列或者一維列表,**同樣,我們可以指定陣列和列表的維度,shuffle(x)
函式和permutation(x)
函式一樣,無論幾個維度的陣列和列表,最終只對第乙個維度進行亂序。**關於shuffle(x)
函式對高維陣列和列表的亂序處理這裡不再贅述。
下面通過乙個**對permutation(x)
和shuffle(x)
兩個亂序函式進行乙個簡單的總結。
將兩個Excel表中的資料合併
主要用到三個函式 1,iserror 判斷,真值,錯值 2,index reference,row num,column num,area num 返回引用中指定單元格區域的引用。3,match lookup value,lookup array,match type 需要查詢的內容,查詢的資料,匹...
如歌將兩個陣列合併 演算法 合併兩個有序陣列
給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3 輸出 1,2,2,3,5,6 10 9 nums1 i nums2 i 10 9 nums...
找到陣列中兩個最小的元素
1 基本思路 設定兩個min1 min2變數,分別儲存第乙個最小的資料,第二個的資料。先將其初始化為乙個相當大的值,然後依次與陣列中的每乙個元素比較,只有當比min1大的時候才會去比較min2,如此比較下來便可以得到陣列中兩個最小的元素。如果初始化的時候只是設定為第乙個元素的值,在特殊情況下,第乙個...