婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > NumPy實現ndarray多維數組操作

NumPy實現ndarray多維數組操作

熱門標簽:池州外呼調研線路 沈陽人工外呼系統價格 沈陽外呼系統呼叫系統 武漢外呼系統平臺 如何申請400電話費用 沈陽防封電銷卡品牌 外呼系統哪些好辦 江西省地圖標注 富錦商家地圖標注

簡介

NumPy一個非常重要的作用就是可以進行多維數組的操作,多維數組對象也叫做ndarray。我們可以在ndarray的基礎上進行一系列復雜的數學運算。

本文將會介紹一些基本常見的ndarray操作,大家可以在數據分析中使用。

創建ndarray

創建ndarray有很多種方法,我們可以使用np.random來隨機生成數據:

import numpy as np
# Generate some random data
data = np.random.randn(2, 3)
data
array([[ 0.0929,  0.2817,  0.769 ],
       [ 1.2464,  1.0072, -1.2962]])

除了隨機創建之外,還可以從list中創建:

data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
array([6. , 7.5, 8. , 0. , 1. ])

從list中創建多維數組:

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

使用np.zeros創建初始值為0的數組:

np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

創建2維數組:

np.zeros((3, 6))
array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

使用empty創建3維數組:

np.empty((2, 3, 2))
array([[[0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.]]])

注意,這里我們看到empty創建的數組值為0,其實并不是一定的,empty會從內存中隨機挑選空間來返回,并不能保證這些空間中沒有值。所以我們在使用empty創建數組之后,在使用之前,還要記得初始化他們。

使用arange創建范圍類的數組:

np.arange(15)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

指定數組中元素的dtype:

arr1 = np.array([1, 2, 3], dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)

ndarray的屬性

可以通過data.shape獲得數組的形狀。

data.shape
(2, 3)

通過ndim獲取維數信息:

arr2.ndim
2

可以通過data.dtype獲得具體的數據類型。

data.dtype
dtype('float64')

ndarray中元素的類型轉換

在創建好一個類型的ndarray之后,還可以對其進行轉換:

arr = np.array([1, 2, 3, 4, 5])
arr.dtype
dtype('int64')

float_arr = arr.astype(np.float64)
float_arr.dtype
dtype('float64')

上面我們使用astype將int64類型的ndarray轉換成了float64類型的。

如果轉換類型的范圍不匹配,則會自動進行截斷操作:

arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr.astype(np.int32)

array([ 3, -1, -2,  0, 12, 10], dtype=int32)

注意,這里是把小數截斷,并沒有向上或者向下取整。

ndarray的數學運算

數組可以和常量進行運算,也可以和數組進行運算:

arr = np.array([[1., 2., 3.], [4., 5., 6.]])

arr * arr

array([[ 1.,  4.,  9.],
       [16., 25., 36.]])

arr + 10

array([[11., 12., 13.],
       [14., 15., 16.]])

arr - arr

array([[0., 0., 0.],
       [0., 0., 0.]])

1 / arr

array([[1.    , 0.5   , 0.3333],
       [0.25  , 0.2   , 0.1667]])

arr ** 0.5

array([[1.    , 1.4142, 1.7321],
       [2.    , 2.2361, 2.4495]])

數組之間還可以進行比較,比較的是數組中每個元素的大小:

arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])

arr2 > arr

array([[False,  True, False],
       [ True, False,  True]])

index和切片

基本使用

先看下index和切片的基本使用,index基本上和普通數組的使用方式是一樣的,用來訪問數組中某一個元素。

切片要注意的是切片后返回的數組中的元素是原數組中元素的引用,修改切片的數組會影響到原數組。

# 構建一維數組
arr = np.arange(10)

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# index訪問
arr[5]
5

# 切片訪問
arr[5:8]
array([5, 6, 7])

# 切片修改
arr[5:8] = 12
array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

# 切片可以修改原數組的值
arr_slice = arr[5:8]
arr_slice[1] = 12345
arr

array([    0,     1,     2,     3,     4,    12, 12345,    12,     8,
           9])

# 構建二維數組
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[2]

array([7, 8, 9])

# index 二維數組
arr2d[0][2]
3

# index二維數組
arr2d[0, 2]
3

# 構建三維數組
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d

array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

# index三維數組
arr3d[0]

array([[1, 2, 3],
       [4, 5, 6]])

# copy是硬拷貝,和原數組的值相互不影響
old_values = arr3d[0].copy()
arr3d[0] = 42

arr3d

array([[[42, 42, 42],
        [42, 42, 42]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

arr3d[0] = old_values
arr3d

array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

# index 三維數組
arr3d[1, 0]

array([7, 8, 9])

x = arr3d[1]
x

array([[ 7,  8,  9],
       [10, 11, 12]])

x[0]

array([7, 8, 9])

index with slice

slice還可以作為index使用,作為index使用表示的就是一個index范圍值。

作為index表示的slice可以有多種形式。

有頭有尾的,表示index從1開始到6-1結束:

arr[1:6]
array([ 1,  2,  3,  4, 64])

無頭有尾的,表示index從0開始,到尾-1結束:

arr2d[:2]
array([[1, 2, 3],
       [4, 5, 6]])

有頭無尾的,表示從頭開始,到所有的數據結束:

arr2d[:2, 1:]
array([[2, 3],
       [5, 6]])
arr2d[1, :2]
array([4, 5])

boolean index

index還可以使用boolean值,表示是否選擇這一個index的數據。

我們先看下怎么構建一個boolean類型的數組:

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
names == 'Bob'

array([ True, False, False,  True, False, False, False])

上面我們通過比較的方式返回了一個只包含True和False的數組。

這個數組可以作為index值來訪問數組:

#  構建一個7 * 4 的數組
data = np.random.randn(7, 4)

array([[ 0.275 ,  0.2289,  1.3529,  0.8864],
       [-2.0016, -0.3718,  1.669 , -0.4386],
       [-0.5397,  0.477 ,  3.2489, -1.0212],
       [-0.5771,  0.1241,  0.3026,  0.5238],
       [ 0.0009,  1.3438, -0.7135, -0.8312],
       [-2.3702, -1.8608, -0.8608,  0.5601],
       [-1.2659,  0.1198, -1.0635,  0.3329]])

# 通過boolean數組來訪問:
data[names == 'Bob']
array([[ 0.275 ,  0.2289,  1.3529,  0.8864],
       [-0.5771,  0.1241,  0.3026,  0.5238]])

在索引行的時候,還可以索引列:

data[names == 'Bob', 3]
array([0.8864, 0.5238])

可以用 ~符號來取反:

data[~(names == 'Bob')]
array([[-2.0016, -0.3718,  1.669 , -0.4386],
       [-0.5397,  0.477 ,  3.2489, -1.0212],
       [ 0.0009,  1.3438, -0.7135, -0.8312],
       [-2.3702, -1.8608, -0.8608,  0.5601],
       [-1.2659,  0.1198, -1.0635,  0.3329]])

我們可以通過布爾型數組設置值,在實際的項目中非常有用:

data[data  0] = 0
array([[0.275 , 0.2289, 1.3529, 0.8864],
       [0.    , 0.    , 1.669 , 0.    ],
       [0.    , 0.477 , 3.2489, 0.    ],
       [0.    , 0.1241, 0.3026, 0.5238],
       [0.0009, 1.3438, 0.    , 0.    ],
       [0.    , 0.    , 0.    , 0.5601],
       [0.    , 0.1198, 0.    , 0.3329]])

data[names != 'Joe'] = 7
array([[7.    , 7.    , 7.    , 7.    ],
       [0.    , 0.    , 1.669 , 0.    ],
       [7.    , 7.    , 7.    , 7.    ],
       [7.    , 7.    , 7.    , 7.    ],
       [7.    , 7.    , 7.    , 7.    ],
       [0.    , 0.    , 0.    , 0.5601],
       [0.    , 0.1198, 0.    , 0.3329]])

Fancy indexing

Fancy indexing也叫做花式索引,它是指使用一個整數數組來進行索引。

舉個例子,我們先創建一個 8 * 4的數組:

arr = np.empty((8, 4))
for i in range(8):
    arr[i] = i
arr
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])

然后使用一個整數數組來索引,那么將會以指定的順序來選擇行:

arr[[4, 3, 0, 6]]
array([[4., 4., 4., 4.],
       [3., 3., 3., 3.],
       [0., 0., 0., 0.],
       [6., 6., 6., 6.]])

還可以使用負值來索引:

arr[[-3, -5, -7]]
array([[5., 5., 5., 5.],
       [3., 3., 3., 3.],
       [1., 1., 1., 1.]])

花式索引還可以組合來使用:

arr = np.arange(32).reshape((8, 4))
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])

上面我們構建了一個8 * 4的數組。

arr[[1, 5, 7, 2], [0, 3, 1, 2]]
array([ 4, 23, 29, 10])

然后取他們的第2列的第一個值,第6列的第三個值等等。最后得到一個1維的數組。

數組變換

我們可以在不同維度的數組之間進行變換,還可以轉換數組的軸。

reshape方法可以將數組轉換成為任意的形狀:

arr = np.arange(15).reshape((3, 5))
arr
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

數組還提供了一個T命令,可以將數組的軸進行對調:

arr.T
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

對于高維數組,可以使用transpose來進行軸的轉置:

arr = np.arange(16).reshape((2, 2, 4))
arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
        
arr.transpose((1, 0, 2))
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

上面的transpose((1, 0, 2)) 怎么理解呢?

其含義是將x,y軸對調,z軸保持不變。

上面我們通過使用reshape((2, 2, 4))方法創建了一個3維,也就是3個軸的數組。 其shape是 2 * 2 * 4 。

先看下對應關系:

(0,0)-》 [ 0, 1, 2, 3]

(0,1)-》 [ 4, 5, 6, 7]

(1,0)-》 [ 8, 9, 10, 11]

(1,1)-》 [12, 13, 14, 15]

轉換之后:

(0,0)-》 [ 0, 1, 2, 3]

(0,1)-》 [ 8, 9, 10, 11]

(1,0)-》[ 4, 5, 6, 7]

(1,1)-》 [12, 13, 14, 15]

于是得到了我們上面的的結果。

多維數組的軸轉換可能比較復雜,大家多多理解。

還可以使用 swapaxes 來交換兩個軸,上面的例子可以重寫為:

arr.swapaxes(0,1)

到此這篇關于NumPy實現ndarray多維數組操作的文章就介紹到這了,更多相關NumPy ndarray多維數組操作內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • numpy 聲明空數組詳解
  • Numpy將二維數組添加到空數組的實現
  • 在NumPy中創建空數組/矩陣的方法
  • 如何在向量化NumPy數組上進行移動窗口
  • 如何將numpy二維數組中的np.nan值替換為指定的值
  • 解決numpy數組互換兩行及賦值的問題
  • python 將numpy維度不同的數組相加相乘操作
  • python numpy.power()數組元素求n次方案例
  • Python 用NumPy創建二維數組的案例
  • Numpy ndarray 多維數組對象的使用
  • 淺談Python numpy創建空數組的問題

標簽:通遼 常德 阿里 株洲 潛江 黑龍江 呂梁 銅川

巨人網絡通訊聲明:本文標題《NumPy實現ndarray多維數組操作》,本文關鍵詞  NumPy,實現,ndarray,多維,數組,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《NumPy實現ndarray多維數組操作》相關的同類信息!
  • 本頁收集關于NumPy實現ndarray多維數組操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩一级大片网址| 美国十次综合导航| 国产精品午夜在线观看| 国产精品麻豆网站| 亚洲另类在线一区| 石原莉奈一区二区三区在线观看| 日本欧美加勒比视频| 韩国av一区二区三区在线观看| 国产精品一二三四五| 精品黑人一区二区三区久久| 日韩精品综合一本久道在线视频| 精品日产卡一卡二卡麻豆| 久久综合av免费| 亚洲男人的天堂一区二区 | 成人永久看片免费视频天堂| 国产不卡免费视频| 欧美人xxxx| 亚洲欧洲国产日本综合| 亚洲国产日韩a在线播放性色| 日本不卡在线视频| 福利视频网站一区二区三区| 欧美日韩国产区一| 国产精品另类一区| 免费成人在线网站| 欧美专区日韩专区| 久久青草欧美一区二区三区| 亚洲在线中文字幕| 国产精品自拍在线| 欧美日韩国产一区二区三区地区| 国产日韩成人精品| 久久aⅴ国产欧美74aaa| 日韩欧美国产精品一区| 奇米影视一区二区三区| 在线播放国产精品二区一二区四区 | 成人h动漫精品| 亚洲视频 欧洲视频| 91视频com| 亚洲一区二区综合| 9久草视频在线视频精品| 国产欧美精品一区二区三区四区| 国产美女av一区二区三区| 精品国产欧美一区二区| 粉嫩久久99精品久久久久久夜 | 日韩不卡免费视频| 欧美精品一区二区在线观看| 高清国产一区二区三区| 自拍偷拍欧美精品| 3d动漫精品啪啪一区二区竹菊 | xnxx国产精品| 日本福利一区二区| 亚洲激情在线播放| 日韩视频一区二区在线观看| 韩国视频一区二区| 亚洲色图在线视频| 91精品国产91久久久久久一区二区 | 国产精品18久久久久久久久 | 精品第一国产综合精品aⅴ| 粉嫩aⅴ一区二区三区四区五区| 亚洲丝袜制服诱惑| 久久精品夜色噜噜亚洲a∨| 色94色欧美sute亚洲线路二 | 久久网这里都是精品| 欧美乱熟臀69xxxxxx| 韩国v欧美v亚洲v日本v| 午夜精品久久久久久久久久久 | 99国产精品久久久| 精品一区二区精品| 五月激情六月综合| 亚洲女人****多毛耸耸8| 精品国产自在久精品国产| 欧美肥妇bbw| 在线综合视频播放| 欧美日本国产视频| 国产精品成人午夜| 日韩精品影音先锋| 欧美一区二区女人| 日韩一区二区三区视频在线| 欧美午夜精品久久久久久孕妇| 99这里都是精品| 99免费精品视频| 色综合色狠狠天天综合色| 色欧美日韩亚洲| 欧美日韩成人高清| 欧美电影免费观看完整版| 欧美sm极限捆绑bd| 久久久久久久久一| 亚洲国产精品成人综合色在线婷婷 | 欧美mv和日韩mv的网站| 日韩欧美激情一区| 国产人久久人人人人爽| 中文字幕一区二区三区四区| 一区二区国产视频| 日韩黄色免费网站| 国产一区二区三区观看| 成人动漫一区二区三区| 欧洲生活片亚洲生活在线观看| 欧美福利电影网| 欧美国产欧美综合| 亚洲网友自拍偷拍| 国产成人av一区| 欧美日韩一区 二区 三区 久久精品| 日韩欧美色电影| 亚洲精品免费视频| 国产乱码精品1区2区3区| 在线观看欧美日本| 精品欧美乱码久久久久久1区2区| 国产精品妹子av| 午夜成人在线视频| 一本到不卡免费一区二区| 精品国产123| 青草国产精品久久久久久| 精品久久久久久久久久久院品网| 国产精品国产三级国产| 久久国产免费看| 欧美日韩精品三区| 最新国产精品久久精品| 国产一区欧美一区| 91精品国产91久久久久久一区二区| 亚洲人xxxx| 不卡的av网站| 亚洲欧美一区二区三区久本道91 | 亚洲国产精品成人综合| 经典三级视频一区| 久久午夜色播影院免费高清| 日本一道高清亚洲日美韩| 9191久久久久久久久久久| 日韩精品一级中文字幕精品视频免费观看 | 国产精品亚洲一区二区三区在线 | 极品少妇xxxx精品少妇| 久久久亚洲高清| 高清免费成人av| 亚洲欧美aⅴ...| 精品视频在线免费观看| 日韩激情一区二区| 亚洲精品一区二区在线观看| 国产91精品入口| 亚洲另类在线制服丝袜| 欧美日韩国产另类一区| 狠狠色2019综合网| 亚洲精品成人悠悠色影视| 91精品中文字幕一区二区三区| 色婷婷av久久久久久久| 欧美aaaaa成人免费观看视频| 国产女主播一区| 欧美色综合天天久久综合精品| 日韩在线播放一区二区| 中文字幕不卡的av| 91精品福利在线一区二区三区 | 欧美高清在线视频| 欧美色涩在线第一页| 懂色av中文一区二区三区| 一区二区三区**美女毛片| 欧美成人官网二区| 欧美日韩免费一区二区三区| 成人黄色综合网站| 国产精品一区二区不卡| 久久九九久精品国产免费直播| 国产精品888| 另类的小说在线视频另类成人小视频在线 | 亚洲视频狠狠干| 中文字幕一区二区三区乱码在线| 欧美一区二区视频免费观看| 99在线热播精品免费| 成人午夜碰碰视频| 欧美视频一区二区三区| 91一区在线观看| 床上的激情91.| 波多野结衣中文一区| 国产成人精品影视| 韩国精品主播一区二区在线观看 | 国产欧美精品一区二区色综合| 精品91自产拍在线观看一区| 欧美成人一区二区三区在线观看| 欧美精品久久99久久在免费线| 在线观看91av| 精品美女一区二区三区| 国产欧美一区二区精品仙草咪| 国产日韩精品一区二区三区在线| 国产日韩精品久久久| 综合激情成人伊人| 三级欧美在线一区| 成人综合在线网站| 色琪琪一区二区三区亚洲区| 亚洲色图制服诱惑| 亚洲成人自拍一区| 青草av.久久免费一区| 国产高清成人在线| 日本韩国视频一区二区| 日韩免费看网站| 亚洲天堂成人在线观看| 日韩高清不卡在线| www.99精品| 久久久久国产精品厨房| 亚洲成人激情综合网| 国产不卡视频一区| 欧美成人国产一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 国产一区二三区好的| 欧美亚洲禁片免费| 亚洲欧洲av在线|