精簡--numpy庫(新技能)
1、對於輸入矩陣、陣列進行洗牌的兩個函式:numpy.random.shuffle(x) 和 numpy.random.permutation(x)是有區別的:
區別1:.permutation(x)可以將洗牌後的副本輸出,而.shuffle(x)輸出是None。對於.shuffle(x)重新洗牌後的副本還是x來表示。見例子:
import numpy as np a = np.array([[1,2,3,4], [5,6,7,8], [3,4,5,6], [1,4,7,8]]) print(a) print('/*/*/*/*/*') b = np.random.permutation(a) print(b) print('/*/*/*/*/*') c = np.random.shuffle(a) print(c) print(a)
輸出:
[[1 2 3 4]
[5 6 7 8]
[3 4 5 6]
[1 4 7 8]]
/*/*/*/*/*
[[1 2 3 4]
[1 4 7 8]
[5 6 7 8]
[3 4 5 6]]
/*/*/*/*/*
None
[[1 4 7 8]
[1 2 3 4]
[5 6 7 8]
[3 4 5 6]]
區別2:如果傳入的是一個整數的時候,.permutation(x)可以返回一個洗牌後的arange,而.shuffle(x)中要求x不能是整數。
import numpy as np a = 10 b = np.random.permutation(a) print(b) print('/*/*/*/*/*') c = np.random.shuffle(a) print(a)
輸出:
[7 8 2 0 4 5 1 9 6 3]
File "F:/learning/test-package/train.py", line 7, in <module>
c = np.random.shuffle(a)
/*/*/*/*/*
File "mtrand.pyx", line 4796, in mtrand.RandomState.shuffle (numpy\random\mtrand\mtrand.c:38843)
TypeError: object of type 'int' has no len()
2、numpy.random.uniform(-x, x)———隨機生成(-x到x範圍內的一個數)
print(np.random.uniform(-1, 1))
輸出:
第一次:-0.33214855896802553
第二次:-0.5749959388706738
3、numpy.random.seed(x)—————方法改變隨機數生成器的種子,可以在呼叫其他隨機模組函式之前呼叫此函式。x -- 改變隨機數生成器的種子seed。本函式沒有返回值。
注意:seed(()是不能直接訪問的,需要匯入 random 模組,然後通過 random 靜態物件呼叫該方法。
import numpy as np
np.random.seed( 5 )
print("Random number with seed 5 : ", np.random.random())
# 生成同一個隨機數
np.random.seed( 5 )
print("Random number with seed 5 : ", np.random.random())
# 生成同一個隨機數
np.random.seed( 1 )
print("Random number with seed 1 : ", np.random.random())
輸出:
Random number with seed 5 : 0.22199317108973948
Random number with seed 5 : 0.22199317108973948
Random number with seed 1 : 0.417022004702574
4、區分np.nonzero()與np.count_nonzero()的區別:
①、返回值不一樣:np.nonzero()是返回非零元素對應的索引值(型別是一個;count_nonzero返回滿足(條件)的數量的統計和,
②、應用範圍不同:np.nonzero()可以對矩陣、陣列或者元組(只存在數字)進行操作;np.count_nonzero()只能應用於矩陣中。
接下來看例項:
Example 1:矩陣
import numpy as np
array = np.array([[1, 0, 3], [1, 6, 7], [1, 9, 11]])
non_ones = np.nonzero(array)
count_zeros = np.count_nonzero(array != 0) #矩陣array中非零元素個數的統計
count_ones = np.count_nonzero(array != 1) #矩陣array中非壹元素個數的統計
print(array)
print(non_ones)
print(count_zeros)
print(count_ones)
輸出:
[[ 1 0 3]
[ 1 6 7]
[ 1 9 11]]
(array([0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([0, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
8
6
Example 2:列表
import numpy as np
list = [1, 2, 0, 4, 0]
non_ones = np.nonzero(list)
print(list)
print(non_ones)
輸出:
[1, 2, 0, 4, 0]
(array([0, 1, 3], dtype=int64),)
Example 3:元組(非全數字)
import numpy as np
tuple = ('apple', 0, 1, 4, 1, 0)
non_ones = np.nonzero(tuple )
print(tuple)
print(non_ones)
輸出:
('apple', 0, 1, 4, 1, 0)
(array([0, 1, 2, 3, 4, 5], dtype=int64),)
Example 4:元組(全數字)
import numpy as np
tuple = (0, 1, 4, 1, 0)
non_ones = np.nonzero(tuple )
print(tuple)
print(non_ones)
輸出:
(0, 1, 4, 1, 0)
(array([1, 2, 3], dtype=int64),)
4、隨機生成矩陣:np.empty()與np.random.random()
注意:np.empty()可以指定隨機生成資料的型別(numpy.
empty
(shape, dtype=float, order='C'))
np.random.random()
import numpy as np
b = np.empty([3, 4], dtype=int)
d = np.random.random([3, 4])
print(b)
print(d)
輸出:
[[ -89792704 32762 -89814704 32762]
[1915740112 0 1952805488 1884251237]
[1852795252 0 0 0]]
[[0.23151918 0.02996494 0.41285224 0.68917454]
[0.67876318 0.05227411 0.02135239 0.02125393]
[0.84004973 0.62453174 0.88129274 0.5860845 ]]