1. 程式人生 > >精簡--numpy庫(新技能)

精簡--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(shapedtype=floatorder='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 ]]