1. 程式人生 > >二、Numpy基礎:數組修改

二、Numpy基礎:數組修改

none pad 屬性 border lex gpo 定義 ndarray 尺寸

一、數組屬性

  • 維度:.ndim,返回當前數組維度
  • 類型:.dtype,返回數組內元素的數據類型,註:numpy定義的數組數據類型是統一,不能多類型混合
  • 形狀:.shape,返回數據形狀,數組每層中的元素個數
  • 元素總數:.size,返回數組中元素總個數
  • 字節大小:.itemsize,返回數組中每個元素的字節大小。
import numpy as np
a=np.full((2,5,4),10)
print("數組a:",a)
print("數組a中元素總數:",a.size)
print("數組a的形狀:",a.shape)
print("數組a中的元素類型:",a.dtype)
print("數組a的維度:",a.ndim)
print("數組a中的元素字節大小:",a.itemsize)
>>>
數組a: [[[10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]]

 [[10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]
  [10 10 10 10]]]
數組a中元素總數: 40
數組a的形狀: (2, 5, 4)
數組a中的元素類型: int32
數組a的維度: 3
數組a中的元素字節大小: 4

二、數據類型

  • 不指定的情況下,numpy會自動推斷出適合的數據類型,所以一般不需要顯示給定數據類型。
  • 數值型dtype的命名方式為:一個類型名稱(eg:int、float等),後接一個表示各個元素位長的數字
  • 如Python的float數據類型(雙精度浮點值),需要占用8個字節(64位),因此在NumPy中記為float64
  • 每個數據類型都有一個類型代碼,即簡寫方式
數據類型 簡寫 說明 字節 範圍
整型 int_ 默認整形
intc 等價於long的整形
int8 i1 字節整形 1 [-128,127]
int16 i2 整形 2 [-32768,32767]
int32 i3 整形 4 [-2^31, 2^31-1]
int64 i4 整形 6 [-2^63, 2^63-1]
無符號
整型
uint8 u1 無符號整形 1 [0,255]
uint16 u2 無符號整形 2 [0,65535]
uint32 u3 無符號整形 1 [0, 2^32-1]
uint64 u4 無符號整形 1 [0,2^64-1]
布爾 bool_ 布爾值 1 True或者False
浮點型 float_ float64簡寫形式 8
float16 f2 半精度浮點型 2 1符號位+5位指數+10位的小數部分
float32 f4或者f 單精度浮點型 4 1符號位+8位指數+23位的小數部分
float64 f8或者d 雙精度浮點型 8 1符號位+11位指數+52位的小數部分
復數 complex_ c16 complex128的簡寫形式
complex64 c8 復數,由兩個32位的浮點數來表示 32
complex128 c16 復數,由兩個64位的浮點數來表示 64
對象 object O Python對象類型
字符串 String_ S 固定長度的字符串類型(每個字符1個字節)
Unicode_ U 固定長度的unicode類型的字符串

三、數組修改(屬性)

  • 形狀修改:.reshape()、.T
  • 維度修改:.reshape()
  • 類型修改:.astype()

3.1、reshape()方法:修改數組形狀與維度

  • 直接修改數組ndarray的shape值,要求修改後乘積不變。
  • 直接使用reshape函數創建一個改變尺寸的新數組,原數組的shape保持不變,但是新數組和原數組共享一個內存空間,也就是修改任何一個數組中的值都會對另外一個產生影響,另外要求新數組的元素個數和原數組一致。
  • 當指定某一個軸為-1的時候,表示將根據數組元素的數量自動計算該軸的長度值。
import numpy as np
a=np.arange(30)
print("原數組(一維):",a)
b=a.reshape(2,3,5)
print("新數組(三維):",b)
b[1][2][2]=666
print("修改b中的數值會影響到a:",a)
print("對b使用降維打擊:",b.reshape(10,-1))
>>>
原數組(一維): 
[ 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]
新數組(三維):
 [[[ 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]]]
修改b中的數值會影響到a:
 [  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 666  28  29]
對b使用降維打擊: 
[[  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]
 [666  28  29]]

3.2、T方法:行列轉置

  • 使用T方法以後,可以對數組進行行列轉置。
import numpy as np
a=np.random.randint(1,10,size=(2,3,4))
b=a.T
print(b.shape)
>>>
(4, 3, 2)

3.2、astype()方法:修改元素類型

  • 如果需要更改一個已經存在的數組的數據類型,可以通過astype方法進行修改從而得到一個新數組。
import numpy as np
a=np.arange(1,5)
print("原數組:{0},其數據類型為:{1}".format(a,a.dtype))
b=a.astype(float)
print("新數組:{0},其數據類型為:{1}".format(b,b.dtype))
>>>
原數組:[1 2 3 4],其數據類型為:int32
新數組:[1. 2. 3. 4.],其數據類型為:float64

二、Numpy基礎:數組修改