溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)怎么使用

發(fā)布時(shí)間:2023-02-24 10:04:21 來(lái)源:億速云 閱讀:89 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)怎么使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

numpy 堆疊數(shù)組

在做圖像和 nlp 的數(shù)組數(shù)據(jù)處理的時(shí)候,經(jīng)常需要實(shí)現(xiàn)兩個(gè)數(shù)組堆疊或者連接的功能,這就需用到 numpy 庫(kù)的一些函數(shù),numpy 庫(kù)中的常用堆疊數(shù)組函數(shù)如下:

  • stack : Join a sequence of arrays along a new axis.

  • hstack: Stack arrays in sequence horizontally (column wise).

  • vstack : Stack arrays in sequence vertically (row wise).

  • dstack : Stack arrays in sequence depth wise (along third axis).

  • concatenate : Join a sequence of arrays along an existing axis.

ravel() 函數(shù)

ravel() 方法可讓將多維數(shù)組展平成一維數(shù)組。如果不指定任何參數(shù),ravel() 將沿著行(第 0 維/軸)展平/拉平輸入數(shù)組。

示例代碼如下:

std_array = np.random.normal(3, 2.5, size=(2, 4))
array1d = std_array.ravel()
print(std_array)
print(array1d)

程序輸出結(jié)果如下:

[[5.68301857 2.09696067 2.20833423 2.83964393]
 [2.38957339 9.66254303 1.58419716 2.82531094]]
 
[5.68301857 2.09696067 2.20833423 2.83964393 2.38957339 9.66254303 1.58419716 2.82531094]

stack() 函數(shù)

stack() 函數(shù)原型是 stack(arrays, axis=0, out=None),功能是沿著給定軸連接數(shù)組序列,軸默認(rèn)為第0維。

1,參數(shù)解析:

  • arrays: 類似數(shù)組(數(shù)組、列表)的序列,這里的每個(gè)數(shù)組必須有相同的shape。

  • axis: 默認(rèn)為整形數(shù)據(jù),axis決定了沿著哪個(gè)維度stack輸入數(shù)組。

2,返回:

  • stacked : ndarray 類型。The stacked array has one more dimension than the input arrays.

實(shí)例如下:

import numpy as np
# 一維數(shù)組進(jìn)行stack
a1 = np.array([1, 3, 4])    # shape (3,)
b1 = np.array([4, 6, 7])    # shape (3,)
c1 = np.stack((a,b))
print(c1)
print(c1.shape)    # (2,3)
# 二維數(shù)組進(jìn)行堆疊
a2 = np.array([[1, 3, 5], [5, 6, 9]])    # shape (2,3)
b2 = np.array([[1, 3, 5], [5, 6, 9]])    # shape (2,3)
c2 = np.stack((a2, b2), axis=0)
print(c2)
print(c2.shape)

輸出為:

[[1 3 4] [4 6 7]]

(2, 3)

[[[1 3 5] [5 6 9]] [[1 3 5] [5 6 9]]] (2, 2, 3)

可以看到,進(jìn)行 stack 的兩個(gè)數(shù)組必須有相同的形狀,同時(shí),輸出的結(jié)果的維度是比輸入的數(shù)組都要多一維的。我們拿第一個(gè)例子來(lái)舉例,兩個(gè)含 3 個(gè)數(shù)的一維數(shù)組在第 0 維進(jìn)行堆疊,其過(guò)程等價(jià)于先給兩個(gè)數(shù)組增加一個(gè)第0維,變?yōu)?*3的數(shù)組,再在第 0 維進(jìn)行 concatenate() 操作:

a = np.array([1, 3, 4])
b = np.array([4, 6, 7])
a = a[np.newaxis,:]
b = b[np.newaxis,:]
np.concatenate([a,b],axis=0)

輸出為:

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

vstack()函數(shù)

vstack函數(shù)原型是vstack(tup),功能是垂直的(按照行順序)堆疊序列中的數(shù)組。tup是數(shù)組序列(元組、列表、數(shù)組),數(shù)組必須在所有軸上具有相同的shape,除了第一個(gè)軸。1-D arrays must have the same length.

# 一維數(shù)組
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a,b))

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

# 二維數(shù)組
a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))

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

hstack()函數(shù)

hstack()的函數(shù)原型:hstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組。它其實(shí)就是**水平(按列順序)**把數(shù)組給堆疊起來(lái),與vstack()函數(shù)正好相反。舉幾個(gè)簡(jiǎn)單的例子:

# 一維數(shù)組
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.hstack((a,b))

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

# 二維數(shù)組
a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.hstack((a,b))

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

vstack()和hstack函數(shù)對(duì)比:

這里的v是vertically的縮寫,代表垂直(沿著行)堆疊數(shù)組,這里的h是horizontally的縮寫,代表水平(沿著列)堆疊數(shù)組。 tup是數(shù)組序列(元組、列表、數(shù)組),數(shù)組必須在所有軸上具有相同的shape,除了第一個(gè)軸。

concatenate() 函數(shù)

concatenate()函數(shù)功能齊全,理論上可以實(shí)現(xiàn)上面三個(gè)函數(shù)的功能,concatenate()函數(shù)根據(jù)指定的維度,對(duì)一個(gè)元組、列表中的list或者ndarray進(jìn)行連接,函數(shù)原型:

numpy.concatenate((a1, a2, ...), axis=0)
a = np.array([[1, 2], [3,4]])               
b = np.array([[5, 6], [7, 8]])
# a、b的shape為(2,2),連接第一維就變成(4,2),連接第二維就變成(2,4)
np.concatenate((a, b), axis=0)

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

注意:axis指定的維度(即拼接的維度)可以是不同的,但是axis之外的維度(其他維度)的長(zhǎng)度必須是相同的。注意 concatenate 函數(shù)使用最廣,必須在項(xiàng)目中熟練掌握。

以上就是“Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI