溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

numpy.array 操作使用簡單總結

發布時間:2020-09-15 14:03:17 來源:腳本之家 閱讀:187 作者:liu_coding 欄目:開發技術
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, 1, 5) # 開始:0, 結束1, 元素個數 5。 array([ 0. , 0.25, 0.5 , 0.75, 1. ])
np.logspace(0, 1, 5) # 開始:0, 結束1, 元素個數 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,3,2] ], 產生新數組, 內存不共享

使用布爾數組獲取數據:例: x[np.array([True, False, True, False, False])] 或 x[x>0.5], 返回True對應的數字。

代碼示例:

>>> x = np.arange(10)
>>> y = x[::-1]
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> y
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> y[0] = 100
>>> x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 100])
>>> y
array([100, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> x[0] = 99
>>> x
array([ 99, 1, 2, 3, 4, 5, 6, 7, 8, 100])
>>> y
array([100, 8, 7, 6, 5, 4, 3, 2, 1, 99])
>>> y = x[1:6]
>>> y
array([1, 2, 3, 4, 5])
>>> y[2] = 33
>>> y
array([ 1, 2, 33, 4, 5])
>>> x
array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
>>> x[[3,2,3,2]]
array([33, 2, 33, 2])
>>> z = x[[3,2,3,2]]
>>> z
array([33, 2, 33, 2])
>>> z[3] = 4
>>> z
array([33, 2, 33, 4])
>>> x
array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
>>> x[x>10]
array([ 99, 33, 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., 1.],
  [ 1., 1., 1.]])
>>> b
array([[ 1., 0., 0.],
  [ 0., 1., 0.],
  [ 0., 0., 1.]])
>>> b *= 2
>>> b
array([[ 2., 0., 0.],
  [ 0., 2., 0.],
  [ 0., 0., 2.]])
>>> np.vstack((a, b))
array([[ 1., 1., 1.],
  [ 1., 1., 1.],
  [ 1., 1., 1.],
  [ 2., 0., 0.],
  [ 0., 2., 0.],
  [ 0., 0., 2.]])
>>> 
>>> np.hstack((a, b))
array([[ 1., 1., 1., 2., 0., 0.],
  [ 1., 1., 1., 0., 2., 0.],
  [ 1., 1., 1., 0., 0., 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, 2, 3, 4],
  [ 4, 5, 6, 7],
  [ 7, 8, 9, 10]])
>>> a.ravel()
array([ 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10])

reshape函數可重新定義大小。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女