最開始是想簡單地實現返回在區間[low, high)
之間的隨機整數,只是有乙個值我不想他出現而已。如果這樣的話,**真的很簡單。
def
gen_randint
(low, high, discard)
: result_list =
list
(range
(low, high)
) result_list.remove(discard)
np.random.shuffle(result_list)
return result_list.pop(
)
但在做的過程中,想到可能會出現下面這幾種情況。
需要剔除的不是乙個單值,而是一串數字
可能需要返回乙個隨機數組
可能只傳了上界或者下界,那麼這時候就要考慮到如何設定生成區間的問題
# @time :2020/12/12 11:40
# @author :koroltung
# @filename: user_function.py
import numpy as np
defrandomint_plus
(low, high=
none
, cutoff=
none
, size=
none):
"""用來生成不包含一些中間數值的隨機整數或序列
parameters
----------
low : int
生成隨機整數的下界
high: int
生成隨機整數的上界
cutoff: int/list
不需要包含的乙個或多個值
size: tuple
需要產生的隨機數規模
notes
-----
1. 在呼叫過程中,如果high, cutoff, size都預設,就預設返回乙個[0, low)的值
2. 如果cutoff, size預設,返回[low, high)的乙個隨機整數值
3. 如果size預設, 則返回乙個[low, cutoff)u(cutoff, high)的隨機整數值
4. 返回乙個給定size的矩陣,矩陣元素為[low, cutoff)u(cutoff, high)的隨機整數值
see also
--------
np.random.randint()
"""if high is
none
:assert low is
notnone
,"必須給定乙個值作為上界"
high = low
low =
0 number =
1# 將size拉長成為乙個向量
if size is
notnone
:for i in
range
(len
(size)):
number = number * size[i]
if cutoff is
none
:# 如果不需要剔除值,就通過numpy提供的函式生成隨機整數
random_result = np.random.randint(low, high, size=size)
else
:if number ==1:
# 返回乙個隨機整數
random_result = randint_digit(low, high, cutoff)
else
:# 返回乙個形狀為size的隨機整數陣列
random_result = np.zeros(number,
)for i in
range
(number)
: random_result[i]
= randint_digit(low, high, cutoff)
random_result = random_result.reshape(size)
return random_result.astype(
int)
defrandint_digit
(low, high, cutoff)
:"""用來生成乙個在區間[low, high)排除cutoff後的隨機整數
parameters
----------
low: int
下限,能夠取到
high: int
上限,不能夠取到
cutoff: int/list
乙個需要剔除的數或者陣列,要求在(low, high)區間之間
"""digit_list =
list
(range
(low, high))if
type
(cutoff)
isint
:# 只需要剔除乙個值
if cutoff in digit_list:
# 如果需要剔除的值不存在,則不執行剔除操作
digit_list.remove(cutoff)
else
:for i in cutoff:
# 需要剔除多個值的情況
if i not
in digit_list:
# 如果需要剔除的值不存在,則不執行剔除操作
continue
digit_list.remove(i)
np.random.shuffle(digit_list)
return digit_list.pop(
)# 生成的序列打亂並且返回當前的隨機值
if __name__ ==
'__main__'
: cutoff1 =
3 cutoff2 =[3
,5,10
] low =
1 high =
9 result = randint_digit(low, high, cutoff2)
思路很簡單,但是要考慮到每種傳入引數的可能,還是下了點功夫。總的來說就是我太菜了。好在有所收穫。 python中生成器
生成器 生成器generator 生成器函式generator m i for i in range 5 定義乙個生成器 print type m 判斷m的型別,是乙個生成器 print next m 使用next函式 def inc 定義乙個inc函式 for i in range 5 yield...
python中生成器yield
def yield demo for x in range 3 yield x print 生成器後一行 a yield demo print a 這裡的a是乙個生成器物件 可以用for迴圈來遍歷生成器物件裡的元素 for i in a print i 那麼yield的工作過程是怎麼樣的呢?可以通過...
Python中生成ndarray例項講解
生成ndarray最簡單的方法就是array函式,array函式接受任意的序列型物件,生成乙個新的包含傳遞資料的numpy陣列。例子如下 import numpy as np data1 1,2,3,4 data2 1,2,3,4 5,6,7,8 arr1 np.array data1 arr2 n...