Numpy中的tile方法

2021-08-25 11:55:29 字數 1589 閱讀 4665

在講tile方法之前,先要講一下numpy陣列中的幾個概念。

在numpy中,陣列這一類又被稱為ndarray。

1、ndarray.ndim

指數組的維度,即陣列軸(axes)的個數,其數量等於秩(rank)。通俗地講,我們平時印象中的陣列就是一維陣列,維度為1、軸的個數為1、秩也等於1;最常見的矩陣就是二維陣列,維度為2、軸的個數為2(可以理解為由x軸、y軸組成)、秩等於2;我們所知的空間就相當於三維陣列,維度為3、軸的個數為3(x、y、z軸)、秩等於3;以此類推。

2、ndarray.shape

按教程的話翻譯過來是陣列的維度,這樣就很容易和ndim的概念混淆。所以可以這樣理解,shape的返回值是乙個元組,元組的長度就是陣列的維數,即ndim。而元組中每個整數分別代表陣列在其相應維度(/軸)上的大小。以最常見的矩陣為例,print shape後返回(2,3),說明這是乙個2行3列的矩陣。

下面說一下tile函式,其原型如下。

原型:numpy.tile(a,reps)

tile共有2個引數,a指待輸入陣列,reps則決定a沿著各個維度重複的次數。整個函式用於重複陣列a來構建新的陣列。

假設reps的維度為d,那麼新陣列的維度為max(d,a.ndim)。下面分三種情況進行討論:

(1)a.dim < d

則向a中新增新軸擴充a的維度。維度大小可以從shape中看出,一般通過向shape對應的元組中新增1完成對a維度的擴充。擴充完成後,則可根據reps的值對a中相應維度的值進行重複。

例如,一維陣列shape為(3,),擴充至2維則shape值為(1,3),擴充至3維則shape值為(1,1,3)

(2)a.dim > d

將reps擴充至與a相同的維度。擴充方法同上,也是向shape對應元組中添1,然後再進行重複。

例如,4維陣列a的shape為(2,3,4,5),而reps為(2,2)只有2維,那麼就要對reps添維進行擴充,得到(1,1,2,2)

(3)a.dim = d

不需要擴充,直接按reps的值對相應維度的值進行重複。

>>>from numpy import *

>>> a = array([1,2,3])

>>>print a.shape

(3.)

>>>print a.ndim

1>>>b = tile(a,2)

>>>print b

[1 2 3 1 2 3]

>>>print b.shape

(6,)

>>>print b.ndim

1>>>c = tile(a,(2,3)) #行重複兩次,列重複三次

>>>print c

[[1 2 3 1 2 3 1 2 3]

[1 2 3 1 2 3 1 2 3]]

>>>print c.shape

(2,9)

>>>print c.ndim

2

由此可以看出,得到的新陣列的維度由d和a.ndim的大小決定,shape值由擴充後的a和reps相應維度值的乘積得到。

Numpy中的tile方法

在講tile方法之前,先要講一下numpy陣列中的幾個概念。在numpy中,陣列這一類又被稱為ndarray。1 ndarray.ndim 指數組的維度,即陣列軸 axes 的個數,其數量等於秩 rank 通俗地講,我們平時印象中的陣列就是一維陣列,維度為1 軸的個數為1 秩也等於1 最常見的矩陣就...

numpy中的tile方法

tile tile函式的作用是讓某個陣列 其實不侷限於陣列,但我們這裡只討論陣列 以某種方式重複,構造出新的陣列,所以返回值也是個陣列 一維陣列 a numpy.arange 3 print a a b numpy.tile a,4 重複4次 c numpy.tile a,3 4 3行,每行3次 二...

numpy中的tile函式

在看機器學習實戰這本書時,遇到numpy.tile a,b 函式,愣是沒看懂怎麼回事,裝了numpy模組後,實驗了幾把,原來是這樣子 重複a,b次,這裡的b可以時int型別也可以是遠組型別。python view plain copy import numpy numpy.tile 0,0 5 在列...