Python3:numpy的簡單使用2(改變當前ndarray的類型和形狀以及均勻分佈和正太分佈,去重)

聲明

當前的知識用於本人的複習,改變當前的ndarray的類型,去除重複的數據,序列化,生成均勻分佈數據和正太分佈的數據以及複習前面的matplotlib畫圖操作

1.操作一(改變類型,去重,序列化)

前面改變類型可以使用ndarray.dtype=dtype方式實現,這裏使用其他方式實現

# 修改當前使用的類型
import numpy as np

np_array = np.array(np.random.randint(1, 10, (2, 5)))
# 1.使用astype方式將需要的數據轉換成需要的類型的數據
print("當前產生的數據的類型爲:{}".format(np_array.dtype))
print("輸出當前產生的數據爲:{}".format(np_array))

print("使用astype方式實現的類型轉換後的結果:{}".format(np_array.astype(np.float64)))
print("輸出原來的數據爲:{}".format(np_array))

# 將原來產生的數據轉換爲byte數據,主要用於序列化的操作
print("使用序列化的操作結果爲:{}".format(np_array.tostring()))

# 使用數組的去重操作(去除當前數組中的重複數據的一種操作)
# 1. 將原來的多維數據變爲一維的數據然後,可以使用當前的set集合實現的操作
# 2. 使用當前narray的原生的屬性進行操作
np_int_array = np_array.astype(np.int32)
print("當前去重的操作後的結果爲:{}".format(np.unique(np_int_array)))

# 使用當前的第一種方式實現當前數組的數據的去重操作
one_way_array = np_int_array.flatten()
print("將當前的多維數組轉換爲當前的一維數組:{}".format(one_way_array))
# 利用當前的set集合方式去除當前數組中的重複的數據
print(list(set(one_way_array)))

結果:

在這裏插入圖片描述

1.通過上面的astype方式返回的是一個已經通過類型轉換後的數據,這個原來產生的數據沒有發生任何改變

2.通過ndarray.tostring()方法將當前的類型轉化爲byte類型的數據

3.通過ndarray.flatten()將當前的多維的數組變成一維的數組

3.通過np.unique()方法可以將重複的元素去除

2.操作二(正太分佈,改變形狀,切片)

# 使用當前的數據進行當前的切片操作
import numpy as np

# 用於生成當前商品的模擬浮動,默認使用正態分佈的操作實現,用於模擬7個商品,基礎價格爲10元
price_array = np.random.normal(loc=10, scale=0.1, size=(5, 7))
# 輸出第一個商品的前兩次價格波動
# print(price_array)
print("輸出第一個商品的前兩天的報價:{}".format(price_array[0, 0:2]))

# 分析當前的數據爲二維數據當前的數據的獲取爲[0,0:2],當前的[0,]表示的就是取二維數組中的第一組數據,後面的就是正常的切片操作
# 這表明可以使用[0,0,:3]的方式操作當前的三維數組,說明 通過下標,的方式可以取出 當前各種維度的數據(再二維以上的數據可以進行的操作)

# 下面通過當前的三維數據進行操作:
np_three_array = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]])
print("當前的數組的形狀:{}".format(np_three_array.shape))
print("獲取三維數組中的指定的數據:{}".format(np_three_array[0,1,:2]))

# 修改當前三維數組的形狀,當前元素的大小爲18,所以進行當前的修改當前的形狀的時候,必須保持當前的一致性大小必須是18
# 重新設置當前的形狀的時候,生成的數據爲:9行2列的數據
print(price_array.reshape((7,5))) # 當前的數據默認是按照當前的順序執行的,原來的數據沒有改變

# 使用resize方法將當前的數據進行形狀的改變,原來的數據已經產生變化
price_array.resize((7,5))
print()
print(price_array)
# 將當前的行轉換成列並實現了行列的互轉(即當前行列的數據的對調)
print(price_array.T)

結果:
在這裏插入圖片描述

總結:

1.通過當前的np.random.normal方式創建一個正太分佈的數組,loc是基礎值,scale是浮動的方差

2.通過ndarray[0,0:2]這種切片方式獲取第一個數組中的前兩個數據

3ndarray.reshape()具有返回值,返回的是一個改變形狀後的結果,原來的數據不發生變化

4.ndarray.resize()方法沒有返回值,這個會改變原來的數據的形狀

5.ndarray.T這個會將當前的x軸的數據與y軸的數據交換

3.操作3(均勻分佈和正太分佈畫圖)

# 使用當前numpy生成一些隨機的數組
# 1. 生成均勻分佈的數組的數據
import numpy as np

# 使用當前的0 表示硬幣的正面,使用當前的1 表示硬幣的反面,如果數據量越大分佈的可能性就越均勻
random_array = np.random.uniform(0, 1, 100000)
print(random_array)

# 使用當前的畫圖的方式顯示當前的數據
import matplotlib.pyplot as plt
plt.figure()
plt.hist(random_array,1000,color="r")
plt.show()

# 使用當前的方差的方式生成一組數據,這組數據的結果的表現形式爲:平均值爲 100 並且當前的方差爲1 的 十萬個數據
# 當前的方差:(每一個數減去平均數)的平方 除以當前比較的個數然後再開根
score_array =np.random.normal(loc=100,scale=1,size=1000000)
plt.figure()
plt.hist(score_array,1000)
plt.show()

# 通過當前生成的數據圖表可以知道當前的數據,的中間部分就是平均值,表示當前的離散度越小,當前的數據就會越集中

結果:

均勻分佈

在這裏插入圖片描述

正太分佈

在這裏插入圖片描述

總結:

1.均勻分佈使用np.random.uniform()方式生成指定範圍均勻分佈的指定個數的數據,這些數據可以通過圖表方式發現當前的數據顯示情況可以發現

2.正太分佈使用np.random.normal()方法生成當前生成的數落在指定的loc的數據上

3.一般這種分佈統計圖都會使用直方圖的方式顯示:plt.hist()

4.總結

1.使用當前的numpy可以很容易的生成和模擬數據,比如一些均勻分佈的數據和正太分佈的數據

2.使用numpy和matplotlib實現的畫圖可以很直觀的看出這個數據的顯示

以上純屬個人見解,如有問題請聯繫本人!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章