1. 程式人生 > 實用技巧 >python之numpy操作1

python之numpy操作1

一,多維陣列

1.numpy中的多維陣列是numpy.ndarray類型別的物件,可用於表示資料結構中任意維度的陣列

2.建立多維陣列的物件

方法一:numpy.arange(起始值,終止值,步長),預設起始值是0,步長是1,終止值不可預設,這個返回的是陣列

方法二:numpy.array(任何可被解釋成陣列的容器)這是一個函式,這個陣列內部儲存是連續的,要求資料是同一型別。

3.dnarray.dtype屬性表示元素的資料型別

import numpy as np
a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
b = np.arange(1,10) #[1 2 3 4 5 6 7 8 9]
c = np.arange(1,10,2) #[1 3 5 7 9] print(a) print(b) print(c) d = np.array([]) #空陣列 e = np.array([1,2,3,4]) #一位陣列 f = np.array([[1,2,3],[4,5,6]]) #二維陣列 print(d) print(e) print(f) #檢視這些資料型別 print(type(a)) #<class 'numpy.ndarray'> print(type(e)) #<class 'numpy.ndarray'> print(type(e[0])) #
<class 'numpy.int32'> print(a.dtype) #int32 print(e.dtype) #int32 print(f.dtype) #int32

這裡邊有一個astype()函式

a = np.array(['1','2','3','4'],dtype=np.int32)
print(a.dtype) #int32
b = a.astype(np.str)  #這個函式是用來修改為指定的資料型別
print(type(b[0])) #<class 'numpy.str_'>

#在同一個數組裡邊我們可以強制去放一些不同的資料型別
a = np.array([('ABCD',[1,2,3])],dtype='U4,3i4') #U是字串的簡稱,3i4的i4表示的是int32其中3表示3個int32的資料 print(a) #[('ABCD', [1, 2, 3])] print(a[0]['f0']) #ABCD print(a[0]['f0'][0]) #A print(a[0]['f0'][1]) #B print(a[0]['f0'][2]) #C #我們還可以指定名稱來代替上邊的f0 b = np.array([('ABCD',[1,2,3])],dtype=[ ('name',np.str_,4), ('scores',np.int32,3) ]) print(b[0]['name']) #ABCD print(b[0]['name'][0])#A print(b[0]['name'][1])#B print(b[0]['name'][2])#C

#其中'names''formats'不能變
c = np.array([('ABCD',[1,2,3])],dtype={
'names':['name','scores'],
'formats':['U4','3i4']
})
print(c)
print(c[0]['name'])#ABCD
print(c[0]['name'][0])#A
print(c[0]['name'][1])#B
print(c[0]['name'][2])#C

改變陣列的維度:

1.檢視變維:針對同一陣列獲取不同維度的陣列檢視

陣列.reshape(新維度)獲得一個數組的新維度檢視

陣列.ravel()獲取陣列的一維檢視

2.複製變維

針對同一陣列獲取不同維度的陣列副本

陣列.flatten()返回一個數組的一維副本

3.就地變維

直接使用陣列.shape = ()就會把源陣列的維度改變

還可以使用陣列.resize()可以改變這個陣列的維度

arr1 = np.arange(1,9)
print(arr1)#[1 2 3 4 5 6 7 8]
arr1.shape = (2,2,2) 
print(arr1)
# [[[1 2]
#   [3 4]]
#
#  [[5 6]
#   [7 8]]]