1. 程式人生 > 程式設計 >numpy.array 操作使用簡單總結

numpy.array 操作使用簡單總結

import numpy as np

numpy.array 常用變數及引數

  • dtype變數,用來存放資料型別, 建立陣列時可以同時指定。
  • shape變數, 存放陣列的大小, 這人值是可變的, 只要確保無素個數不變的情況下可以任意修改。(-1為自動適配, 保證個數不變)
  • reshape方法,建立一個改變了形狀的陣列,與原陣列是記憶體共享的,即都指向同一塊記憶體。

建立陣列的方法

np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]],dtype=np.float)
np.arange(0,1,0.1) #0到1之間步長為0.1的陣列,陣列中不包含1
np.linspace(0,5) # 開始:0, 結束1,元素個數 5。 array([ 0.,0.25,0.5,0.75,1. ])
np.logspace(0,元素個數 5. array([ 10**0.,10**0.25,10**0.5,10**0.75,10**1. ])
      # 結果是 array([ 1.,1.77827941,3.16227766,5.62341325,10.  ])
 
s = 'abcdefg'
np.fromstring(s,dtype=np.int8)
 
def func2(i,j):
 return (i+1) * (j+1)
np.fromfunction(func2,(9,9))
 
np.ones((2,2))
np.zero((2,2))
np.eye(2)
 
#建立二維陣列:
np.arange(0,60,10).reshape(-1,1) + np.arange(0,6)

資料讀取

通過下標範圍獲取資料: 與python list物件操作一致。 不同點是這方法獲取的陣列與原陣列是記憶體共享的。

通過整數序列獲取新陣列:例 x[[3,2] ],產生新陣列, 記憶體不共享

使用布林陣列獲取資料:例:x[np.array([True,False,True,False])] 或 x[x>0.5],返回True對應的數字。

程式碼示例:

>>> x = np.arange(10)
>>> y = x[::-1]
>>> x
array([0,4,7,9])
>>> y
array([9,0])
>>> y[0] = 100
>>> x
array([ 0,100])
>>> y
array([100,0])
>>> x[0] = 99
>>> x
array([ 99,99])
>>> y = x[1:6]
>>> y
array([1,5])
>>> y[2] = 33
>>> y
array([ 1,33,5])
>>> x
array([ 99,100])
>>> x[[3,2]]
array([33,2])
>>> z = x[[3,2]]
>>> z
array([33,2])
>>> z[3] = 4
>>> z
array([33,4])
>>> x
array([ 99,100])
>>> x[x>10]
array([ 99,100])
>>> 

陣列擴充套件

np.vstack((a,b)): 增加行數, 把b資料追加到a的下面, 上下連線。
np.hstack((a,b)): 增加列數,把a,b左右連線。

>>> a = np.ones((3,3))
>>> b = np.eye(3)
>>> a
array([[ 1.,1.,1.],[ 1.,1.]])
>>> b
array([[ 1.,0.,0.],[ 0.,1.]])
>>> b *= 2
>>> b
array([[ 2.,2.,2.]])
>>> np.vstack((a,b))
array([[ 1.,[ 2.,2.]])
>>> 
>>> np.hstack((a,2.]])

ufunc運算

ufunc是universal function的縮寫,它是一種能對陣列的每個元素進行操作的函式。NumPy內建的許多ufunc函式都是在C語言級別實現的,因此它們的計算速度非常快。

np.sin(x,x)
np.add(a,b) ~ a+b
np.subtract(a,b) ~ a-b
np.multiply(a,b) ~ a*b
divide ~ a/b
floor divide ~ a//b
negative ~ -a
power ~ a**b
remainder ~ a % b

注意:複雜運算時,中間步聚會有臨時變數,這會拖慢運算速度。

如:

x = a*b + c

等價於

t = a*b
x = t + c
del t

所以可手動優化

x = a * b
x += c

二維陣列轉一維

>>> a
array([[ 1,[ 4,[ 7,10]])
>>> a.ravel()
array([ 1,10])

reshape函式可重新定義大小。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。