亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python之numpy模塊的使用(1)

系統 1549 0
原文鏈接: https://www.numpy.org.cn/

本節內容:

  • 數組的創建
  • 數組操作(獲取數組屬性,數組運算,數組復制,數組展開等等)
  • 獲取數組特定元素

1、創建數組

(1)常用的創建一維數組的方式

            
              # 可以將任意類型的序列(列表、元組、字典、集合、字符串)傳遞給np.array()
a1 = np.array([1, 2, 3, 4])  # 傳遞列表
a2 = np.array((1, 2, 3, 4))  # 傳遞元組
a3 = np.array([1, 2, 3, 4], dtype=float) # 在創建時,指定數組元素的類型
a4 = a3.astype(str) # 也可以改變數組元素的類型
a5 = np.array([1, 2.0, 'a'], dtype=object)  # 可以將類型設置成object,就能讓數組接收多種類型的值
a6 = a5.tolist()  # 可以將數組轉化回list

print(a1, '\n')  # [1 2 3 4]
print(a2, '\n')  # [1 2 3 4]
print(a3)  # [1. 2. 3. 4.]
print(a4)  # ['1.0' '2.0' '3.0' '4.0']
print(a5)  # [1 2.0 'a']
print(a6)  # [1, 2.0, 'a']

            
          

(2)快速創建特定一維數組的幾個方法

            
              # 情況1
# 快速創建一個所有元素為0的數組,用np.zeros()
# 與此類似還有np.ones(),創建一個所有元素為1的數組
# 只有一個參數時可以寫成:np.zeros(5)
# 打印結果:[0. 0. 0. 0. 0.]
my_new_array = np.zeros((5))
print(my_new_array)

# 情況2
# 創建一個隨機數值的數組
# 默認是為每個元素分配0-1之間的隨機值
# 同上述相同,只有一個參數時,可以寫成np.random.random(5)
my_random_array = np.random.random((5))
print(my_random_array)

# 情況3
# 創建一個值范圍為0到4的數組
c = np.arange(5)
print(c)  # [0 1 2 3 4]
# np.arange()可以創建一個在定義的起始值和結束值之間具有特定序列的數組;3表示步長
c2 = np.arange(10, 35, 3)
print(c2)  # [10 13 16 19 22 25 28 31 34]

# 情況4
# 在0到4之間創建4個元素的數組,這4個元素平均分布在0-4之間
d = np.linspace(0, 4, 4)
print(d)  #[0.         1.33333333 2.66666667 4.        ]


            
          

(3)創建多維數組

            
              # 方式1
# 如下,為了創建一個二維數組,我們傳遞了一個列表的列表;
# 同理也可以傳遞一個元組的元組來創建一個二維數組;既有行又有列則為二維
a = np.array([[1.0, 2.0], [3.0, 4.0]])
print(a)

# 方式2
# 也可以通過reshape()方法將一維數組改造形狀變成多維數組
# 這里是將一維數組變成4*5的二維數組
array = np.arange(20).reshape(4,5)
print(array)

            
          

2、數組的操作

(1)通過索引訪問數組元素

            
              # 對一維數組,a[i]形式訪問數組
array1 = np.array([1, 2, 3, 4])
print(array1[0], array1[1], array1[2], array1[3])  # 1 2 3 4

# 對二維數組通過a[i][j]形式訪問數組元素
array2 = array1.reshape(2, 2)
print(array2[0][0], array2[0][1], array2[1][0], array2[1][1])  # 1 2 3 4
# 如下形式也可以獲取二維數組單個元素
print(array2[0, 0])

            
          

(2)獲取數組的一些屬性

            
              array1 = np.array([1, 2, 3, 4])
array2 = array1.reshape(2, 2)
array3 = np.array(['a', 'b', 'c'])

# 1、打印array1對象的類型,
              
                
print(type(array1))

#2、 打印數組元素的數據類型
print(array1.dtype)  # int32
print(array3.dtype)  # 
                
                  <表示字節順序,小端(最小有效字節存儲在最小地址中)
# U表示Unicode,數據類型
# 1表示元素位長,數據大小

# 3、打印數組元素個數
print(array1.size)  # 4
print(array2.size)  # 4

# 4、打印數組形狀
print(array1.shape)  # (4,)
# 也可以按方法的形式獲取該屬性
print(np.shape(array1))  # (4,)
print(array2.shape)  # (2, 2)
# 可以獲取shape返回的元組中的值;如下獲取的就是array2數組有幾行
print(array2.shape[0])  # 2

# 5、打印數組中的一個元素占幾個字節;
# 因為在array1.shape數組元素是int32的,即32位整型;
# 而一個字節是8位,所以一個元素占32/8=4個字節
print(array1.itemsize)  # 4

# 6、打印數組的維數;這個維數和shape元組中的元素個數一致
print(array1.ndim)  # 1

#7、 打印數組要消耗多少內存(字節);一般數組消耗的內存>=數組實際所占的內存
print(array1.nbytes)  # 16

                
              
            
          

(3)數組的運算

            
              array1 = np.array([[1, 2],
                   [3, 4]])
array2 = np.array([[5, 6],
                   [7, 8]])

# (1)可以發現數組的 + - * / 都是逐元素運算的
print(array1 + array2)
# [[ 6  8]
#  [10 12]]

print(array1 - array2)
# [[-4 -4]
#  [-4 -4]]

print(array1 * array2)
# [[ 5 12]
#  [21 32]]

print(array1 / array2)
# [[0.2        0.33333333]
#  [0.42857143 0.5       ]]

# (2)平方運算也是逐元素運算的
print(array1 ** 2)
# [[ 1  4]
#  [ 9 16]]

# (3)>,<邏輯運算也是逐元素運算的;返回的是一個布爾型數組
print(array1 > array2)
# [[False False]
#  [False False]]

# (4)array1.dot(array2)點積運算不是逐元素元素的,與矩陣乘法運算規則相同
print(array1.dot(array2))
# [[19 22]
#  [43 50]]

# 對dot點積運算進一步探索;一維情況
x = np.array([1, 2, 3, 4])
y = np.array([5, 6])
# print(x.dot(y))  # 此時會報錯,如下
# ValueError: shapes (4,) and (2,) not aligned: 4 (dim 0) != 2 (dim 0)
# 當兩個一維數組的元素個數相同時,才能進行dot運算;1*5 + 2*6 + 3*7 + 4*8 = 70
z = np.array([5, 6, 7, 8])
print(x.dot(z))  # 70

#  對dot點積運算進一步探索;二維情況
p = np.array([[1, 2], [3, 4], [5, 6]])
q = np.array([2])
# print(p.dot(q))  # 報錯如下;表明p的列數要和q的行數相等,點積才能運算
# ValueError: shapes (3,2) and (1,) not aligned: 2 (dim 1) != 1 (dim 0)
r = np.array([[1], [2]])
print(p.dot(r))
# [[ 5]
#  [11]
#  [17]]

# (5)特殊運算符
a = np.arange(10)
print(a.mean())  # 4.5
print(a.sum())  # 45
print(a.min())  # 0
print(a.max())  # 9
print(a.cumsum())  # [ 0  1  3  6 10 15 21 28 36 45]

a = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])
# 逐列計算最小值
print(np.amin(a, axis=0))  # [1 2 3 4]
# 逐列計算最大值
print(np.amax(a, axis=0))  # [ 9 10 11 12]
# 逐行計算最小值
print(np.amin(a, axis=1))  # [1 5 9]

            
          

(4)數組的復制

            
              a = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])
# 淺復制;改變a2的同時,也改變了a
a2 = a
a2[0, 0] = 100
print(a)
# [[100   2   3   4]
#  [  5   6   7   8]
#  [  9  10  11  12]]

# 深復制;改變a3并沒有改變a
a3 = a.copy()
a3[0, 1] = 101
print(a3)
# [[100 101   3   4]
#  [  5   6   7   8]
#  [  9  10  11  12]]
print(a)
# [[100   2   3   4]
#  [  5   6   7   8]
#  [  9  10  11  12]]

            
          

(5)flatten和ravel展開數組的區別

            
              a = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])
b1 = a.flatten()
b2 = a.ravel()
print(b1)  # [ 1  2  3  4  5  6  7  8  9 10 11 12]
print(b2)  # [ 1  2  3  4  5  6  7  8  9 10 11 12]

# 可以發現b1是淺復制(flatten())
b1[0] = 100
print(a)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]

# b2是深復制(a.ravel())
b2[0] = 999
print(a)
# [[999   2   3   4]
#  [  5   6   7   8]
#  [  9  10  11  12]]

            
          

(6)tile和repeat創建重復數組

            
              a = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])

# 重復a的整體,2次
b = np.tile(a, 2)
print(b)
# [[ 1  2  3  4  1  2  3  4]
#  [ 5  6  7  8  5  6  7  8]
#  [ 9 10 11 12  9 10 11 12]]

# 逐元素重復a,每個元素重復3次,行優先;可以發現repeat方法返回的結果是一維數組
c = np.repeat(a, 3)
print(c)
# [ 1  1  1  2  2  2  3  3  3  4  4  4  5  5  5  6  6  6  7  7  7  8  8  8
#   9  9  9 10 10 10 11 11 11 12 12 12]

            
          

(7)隨機數組的生成詳述

            
              # (1)生成2*2的隨機數組;取值范圍[0,1)
print(np.random.rand(2, 2))
# [[0.05351956 0.52744627]
#  [0.65351703 0.45760785]]

# (2)打印均值為0方差為1的正態分布形成的2*2隨機數組;
print(np.random.randn(2, 2))
# [[ 1.72616696e-01 -3.75028315e-01]
#  [ 5.73511471e-01 -5.68613463e-04]]

# (3)打印2*2的隨機數組,隨機數取值范圍在[0, 10),左閉右開
print(np.random.randint(0, 10, size=[2, 2]))
# [[8 3]
#  [9 1]]

#(4) 打印隨機數,取值范圍[0,1)
print(np.random.random())
# 0.6703799424762051

# 打印隨機數組,3個元素
print(np.random.random(3))
# [0.06488424 0.23714481 0.10028496]

# 打印2*1的隨機數組
print(np.random.random(size=[2, 1]))
# [[0.64914024]
#  [0.89535928]]


# (5)在給定的列表中選擇隨機元素組成數組
print(np.random.choice(['aaa', 'b', 'c', 'ddd'], size=3))
# ['b' 'b' 'aaa']

# 從給定的列表中選擇10個項目,具有預定義的概率“p”;注意p中的概率加起來要等于1
print(np.random.choice(['a', 'e', 'i', 'o', 'u'], size=10, p=[0.3, 0.1, 0.1, 0.4, 0.1]))
# ['u' 'o' 'o' 'i' 'i' 'a' 'e' 'o' 'a' 'a']

# (6)如果要每次都重復同一組隨機數,則需要設置種子或隨機狀態
# 方式1,創建隨機狀態;會發現運行兩次打印出來的隨機數組相同的
r1 = np.random.RandomState(100)
print(r1.rand(2, 2))

# [[0.54340494 0.27836939]
#  [0.42451759 0.84477613]]

# 方式2,設置隨機種子
np.random.seed(100)
print(np.random.rand(2, 1))
# [[0.54340494]
#  [0.27836939]]


            
          

(8)unique方法

            
              # np.unique()會返回無重復的數組元素;
# 將return_counts設置為True可以返回每個元素的計數;默認是False
a = np.array([1, 1, 2, 2, 2, 3, 4, 5, 6, 1])
u, c = np.unique(a, return_counts=True)
print(u, c)  # [1 2 3 4 5 6] [3 3 1 1 1 1]

b = a.reshape(2, 5)
u, c = np.unique(b, return_counts=True)
print(u, c)  # [1 2 3 4 5 6] [3 3 1 1 1 1]

            
          

3、獲取數組元素的幾種方法

(1)數組的切片操作—獲取數組某塊元素

            
              
a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])

# 獲取單個數組元素可以直接通過索引方式得到;注意索引是從0開始
print(a[2, 4])  # 25

# 切片操作,就是獲取數組某些部分的元素
# 打印數組第一行所有元素; 分號代表所有
print(a[0, :])  # [11 12 13 14 15]

# 打印數組第一列所有元素;
print(a[:, 0])  # [11 16 21 26 31]

# 打印第1,2,3列
print(a[:, 0:3])
# [[11 12 13]
#  [16 17 18]
#  [21 22 23]
#  [26 27 28]
#  [31 32 33]]

# 打印第1,2,4列
print(a[:, [0, 1, 3]])
# print(a[:, (0, 1, 3)])  # 元組也可以
# [[11 12 14]
#  [16 17 19]
#  [21 22 24]
#  [26 27 29]
#  [31 32 34]]

# 打印1,2,3行和1,2,4列
print(a[0:3, [0, 1, 3]])
# [[11 12 14]
#  [16 17 19]
#  [21 22 24]]

# 打印1,3,5行和1,3,5列; 即下標是0,2,4
print(a[::2, ::2])
# [[11 13 15]
#  [21 23 25]
#  [31 33 35]]

# 翻轉行和翻轉整個數組元素
a = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])

print(a[::-1, ])
# [[ 9 10 11 12]
#  [ 5  6  7  8]
#  [ 1  2  3  4]]

print(a[::-1, ::-1])
# [[12 11 10  9]
#  [ 8  7  6  5]
#  [ 4  3  2  1]]

            
          

(2)花式索引—獲取數組中的特定元素

            
              # 一維數組下使用
a = np.arange(0, 100, 9)
print(a)  # [ 0  9 18 27 36 45 54 63 72 81 90 99]
indices = [1, 5, -2]
print(a[indices])  # [ 9 45 90]

# 對二維數組同樣適用;此時將嵌套的一維數組作為一個元素
a2 = a.reshape(3, 4)
print(a2)
# [[ 0  9 18 27]
#  [36 45 54 63]
#  [72 81 90 99]]

indices = [1, 2, -2]
print(a2[indices])
# [[36 45 54 63]
#  [72 81 90 99]
#  [36 45 54 63]]

indices = [1, -2]
print(a2[indices])
# [[36 45 54 63]
#  [36 45 54 63]]

indices = [-1]
print(a2[indices])
# [[72 81 90 99]]

            
          

(3)布爾屏蔽—根據指定的條件獲取數組中的元素

            
              a = np.arange(0, 10)
print(a)  # [0 1 2 3 4 5 6 7 8 9]
mask = a > 6
print(a[mask])  # [7 8 9]

            
          

(4)where() 函數是另外一個根據條件返回數組中的值的有效方法

            
              a = np.arange(0, 100, 10)
print(a)  # [ 0 10 20 30 40 50 60 70 80 90]

# 注意,np.where返回的是滿足條件的元素下標
b = np.where(a < 50)
print(b)  # (array([0, 1, 2, 3, 4], dtype=int64),)
# 可以通過數組的take方法獲取滿足條件的元素
print(a.take(b))  # [[ 0 10 20 30 40]]

# 獲取返回的元組中的下標數組
c = np.where(a >= 50)[0]
print(c)  # [5 6 7 8 9]

# np.where還有x,y兩個參數
d = np.where(a >= 50, 'true', 'false')
print(d)
# ['false' 'false' 'false' 'false' 'false' 'true' 'true' 'true' 'true' 'true']

            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品日本一区二区在线 | 亚洲一区二区日韩欧美gif | 热99精品 | 久久国产香蕉 | 四虎国产精品免费久久久 | 男人的天堂在线免费视频 | 色偷偷91综合久久噜噜 | 99国产视频 | 日日摸夜夜爽久久综合 | 久久天天躁夜夜躁狠狠躁2015 | 99免费在线视频 | 久久综合给合久久97色美利坚 | 久久99精品国产自在现线小黄鸭 | 午夜视频国产 | 欧美一级全部免费视频 | 狠狠色噜狠狠狠狠色综合久 | 久综合网| 亚洲国产精品综合福利专区 | 日日操狠狠干 | 男人都懂www深夜免费网站 | 国内在线播放 | 日本中文字幕一区二区高清在线 | 国产精品资源 | 狠狠干夜夜草 | 香蕉国产综合久久猫咪 | 日韩在线视精品在亚洲 | 成人在线免费观看 | 欧美在线色| 伊人五月天综合 | 国产欧美二区三区 | 久久精品久久久 | 日本综合在线 | 日本大片免费一级 | 久久久噜噜噜久久老司机 | 久久精品无遮挡一级毛片 | 亚洲一区二区三区高清视频 | 色婷婷综合久久久久中文一区二区 | 午夜视频在线免费看 | 日韩成a人片在线观看日本 日韩成人 | 久久一级视频 | 久久久久久久久国产 |