python的numpy,NumPy-01
python的numpy,NumPy-01
NumPy-01
- NumPy數組屬性
- 創建NumPy數組
- 數據類型對象
- 索引
一.NumPy數組屬性
在 NumPy中,每一個線性的數組稱為是一個軸(axis),也就是維度(dimensions)。比如說,二維數組相當于是兩個一維數組,其中第一個一維數組中每個元素又是一個一維數組。所以一維數組就是 NumPy 中的軸(axis),第一個軸相當于是底層數組,第二個軸是底層數組里的數組。而軸的數量——秩,就是數組的維數。很多時候可以聲明 axis。axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。
屬性 | 說明 |
---|---|
ndarray.ndim | 秩,即軸的數量或維度的數量 |
ndarray.shape | 數組的維度,對于矩陣,n 行 m 列 |
ndarray.size | 數組元素的總個數,相當于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 對象的元素類型 |
ndarray.itemsize | ndarray 對象中每個元素的大小,以字節為單位 |
ndarray.flags | ndarray 對象的內存信息 |
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.ndim) #數組的維數
print(a.shape)
a.shape = (3,2) #調整數組大小
print(a.shape)
print(a)
a=a.reshape(1,6) #調整數組大小
print(a)
運行結果:
2
(2, 3)
(3, 2)
[[1 2]
[3 4]
[5 6]]
[[1 2 3 4 5 6]]
二.創建NumPy數組
python的numpy。1.調用 NumPy 的 array 函數,numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0),參數說明如下:
名稱 | 描述 |
---|---|
object | 數組或嵌套的數列 |
dtype | 數組元素的數據類型(可選) |
copy | 數組是否需要復制(可選) |
order | 創建數組的樣式,C為行方向,F為列方向,A為任意方向(默認) |
subok | 默認返回一個和基類類型一致的數組 |
ndmin | 指定生成數組的最小維度 |
import numpy as np
a = np.array([1,2,3])
print (a)
運行結果:
[1 2 3]
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print (a)
運行結果:
[[1 2 3]
[4 5 6]
[7 8 9]]
import numpy as np
a = np.array([1, 2, 3], dtype =float)
print (a)
numpy.array、運行結果:
[1. 2. 3.]
2.numpy.empty 方法用來創建一個指定形狀(shape)、數據類型(dtype)且未初始化的數組:numpy.empty(shape, dtype = float, order = ‘C’)
import numpy as np
a = np.empty([2,2], dtype = 'i1')
print (a) #結果為隨機數,因為數組沒有初始化
運行結果:
[[ -1 -1]
[ -1 127]]
3.numpy.zeros,創建指定大小的數組,數組元素以 0 來填充:numpy.zeros(shape, dtype = float, order = ‘C’),有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機內存中的存儲元素的順序。
import numpy as np
a = np.zeros((5), dtype=np.int) #整型
print(a)
b = np.zeros((2, 2), dtype=[('x', 'complex'), ('y', 'float')]) #自定義類型
print(b)
運行結果:
[0 0 0 0 0]
[[(0.+0.j, 0.) (0.+0.j, 0.)]
[(0.+0.j, 0.) (0.+0.j, 0.)]]
4.numpy.ones方法創建指定形狀的數組,數組元素以 1 來填充:numpy.ones(shape, dtype = None, order = ‘C’)
import numpy as np
a = np.ones(6)# 默認浮點型
print(a)
b = np.ones([3, 2], dtype='i4')# 自定義類型
print(b)
運行結果:
[1. 1. 1. 1. 1. 1.]
[[1 1]
[1 1]
[1 1]]
5.numpy.asarray(a, dtype = None, order = None),a可以是列表, 列表的元組, 元組, 元組的元組, 元組的列表,多維數組等,dtype表示數據類型(可選)。
import numpy as np
print(np.asarray([1,2,3,4,5]))#將列表轉換為 ndarray
print(np.asarray((1,2,3,4,5)))#將元組轉換為 ndarray
運行結果:
[1 2 3 4 5]
[1 2 3 4 5]
6.numpy.frombuffer 用于實現動態數組,接受 buffer 輸入參數,以流的形式讀入轉化成 ndarray 對象。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0),buffer可以是任意對象,會以流的形式讀入,dtype返回數組的數據類型(可選),count 讀取的數據數量,默認為-1,讀取所有數據,offset讀取的起始位置,默認為0。
import numpy as np
a = b'Hello World'
a = np.frombuffer(a, dtype = 'S1')
print (a)
運行結果:
[b’H’ b’e’ b’l’ b’l’ b’o’ b’ ’ b’W’ b’o’ b’r’ b’l’ b’d’]
7.numpy.fromiter(iterable, dtype, count=-1)方法從可迭代對象中建立 ndarray 對象,返回一維數組,iterable表示可迭代對象dtype 表示返回數組的數據類型,count讀取的數據數量,默認為-1,讀取所有數據。
import numpy as np
list = range(8) #創建列表對象
it = iter(list) #迭代器
a = np.fromiter(it, dtype='i1')
print(a)
運行結果:
[0 1 2 3 4 5 6 7]
8.numpy.arange(start, stop, step, dtype),根據 start 與 stop 指定的范圍以及 step 設定的步長,生成一個 ndarray,start 起始值,默認為0,stop終止值(不包含這個值),step步長默認為1。
import numpy as np
a = np.arange(1,100,30,dtype=float)
print (a)
運行結果:
[ 1. 31. 61. 91.]
9.np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None),函數用于創建一個一維數組,數組是一個等差數列構成的,start為序列的起始值,stop為序列的終止值(如果endpoint為true該值包含于數列中)num 為要生成的等步長的樣本數量,默認為50,endpoint 該值為 true 時,數列中中包含stop值,反之不包含,(默認是True)retstep 如果為 True 時,生成的數組中會顯示間距,反之不顯示。
import numpy as np
a = np.linspace(1, 20, 10, endpoint=False)
print(a)
運行結果:
[ 1. 2.9 4.8 6.7 8.6 10.5 12.4 14.3 16.2 18.1]
10.np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) 函數用于創建一個于等比數列,start 序列的起始值為:base **start,stop 序列的終止值為:base ** stop,如果endpoint為true,該值包含于數列中,num為要生成的等步長的樣本數量,默認為50,endpoint 該值為 true 時,數列中中包含stop值,反之不包含,默認是True,base是對數 log 的底數,dtype 為 ndarray 的數據類型。
import numpy as np
a = np.logspace(0,9,10,base=2)
print (a)
運行結果:
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
三.數據類型對象
numpy.dtype(object, align, copy),object 要轉換為的數據類型對象,align 如果為 true,填充字段使其類似的結構體,copy 復制 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用。
import numpy as np
# 'i1' 表示 int8
a = np.dtype('i1')
print(a)
運行結果:int8
import numpy as np
information = np.dtype([('height', 'i2'), ('weight', 'f4')])
a = np.array([(180.5, 67),(185.9, 75)], dtype =information)
print(a)
運行結果:(數據類型轉換為information的數據類型)
[(180, 67.) (185, 75.)]
四.索引
1.slice 函數
import numpy as np
a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
s = slice(2, 9, 3) # 索引從2開始到索引9停止,間隔為3
print(a[s])
運行結果:[2 5 8]
2.冒號分隔切片參數 start:stop:step
import numpy as np
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
b = a[5] #返回與該索引相對應的單個元素
print(b) #5
b=a[5:] #表示從該索引開始以后的所有項都將被提取
print(b) #[5 6 7 8 9]
b=a[5:8] #提取兩個索引(不包括停止索引)之間的項
print(b) #[5 6 7]
運行結果::
5
[5 6 7 8 9]
[5 6 7]
import numpy as np
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
print(a[1:])
print(a[:2])
print(a[1:2])
運行結果:
[[1 2 3]
[3 4 5]
[4 5 6]]
[[3 4 5]
[4 5 6]]
[[1 2 3]
[3 4 5]]
[[3 4 5]]
import numpy as np
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
print(a[1])
print(a[1:])
print(a[1][1:])
print(a[1][1:3])
運行結果:
[[1 2 3]
[3 4 5]
[4 5 6]]
[3 4 5]
[[3 4 5]
[4 5 6]]
[4 5]
[4 5]
切片還可以包括省略號 …,來使選擇元組的長度與數組的維度相同。 如果在行位置使用省略號,它將返回包含行中元素的 ndarray。
import numpy as np
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1]) # 第2列元素
print(a[1, ...]) # 第2行元素
print(a[..., 1:]) # 第2列及剩下的所有元素
運行結果:
[2 4 5]
[3 4 5]
[[2 3]
[4 5]
[5 6]]
3.布爾索引
import numpy as np
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print(x)
print(x[x > 6])#數組中大于6的元素
運行結果:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[ 7 8 9 10 11]
4.花式索引
import numpy as np
x = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(x[[1,2]])#輸出了第一行和第二行
print (x[np.ix_([0,2],[3,1,2])])#輸出了x[0][3],x[0][1],x[0][2]# x[2][3],x[2][1],x[2][2]
運行結果:
[[ 5 6 7 8]
[ 9 10 11 12]]
[[ 4 2 3]
[12 10 11]]