numpy學習之(一)

2021-09-19 13:51:20 字數 3825 閱讀 2641

1、numpy.vectorize()

class numpy.vectorize(pyfunc, otypes=none, doc=none, excluded=none, cache=false, signature=none)

定義了乙個向量函式,輸入是巢狀化的物件序列或者是numpy陣列,

輸出是單個或元組的numpy陣列。跟 python中的map()函式很類似。將函式pyfunc作用在序列化的物件上。

numpy.vectorize()只是為了方便,效率比較低。

官方例子:

import numpy as np 

def myfunc(a, b):

'return a-b if a>b, otherwise return a+b'

if a>b:

return a-b

else:

return a+b

vfunc = np.vectorize(myfunc)

print(vfunc([1, 2, 3, 4], 2))

#[3 4 1 2]

相當於 2 與列表中的1,2,3,4 依次 呼叫函式。即1,2; 2,2; 3,2; 4,2做vfunc計算。

2、np.digitize()函式

umpy.digitize(x, bins, right = false)

引數:x : numpy陣列

bins :一維單調陣列,必須是公升序或者降序

right:間隔是否包含最右

返回值:x在bins中的位置。

用法示例:

import numpy as np

bins = np.array(range(-99, 102, 3))

a = np.digitize(-98,bins) #a=1

b = np.digitize(68,bins) #b=56

print(a)

print(b)

bins值為-99到102(取不到102)的值( [-99, -96, -93, ... , 93, 96, 99] )。

取值在[-∞ ,-96)區間內返回值為1,

在[96,-93)區間內返回值為2,

...在[96,+∞ )區間返回值為66。

所以a的值為1,b的值為56。

3、對numpy中array和asarray的區別詳解

array和asarray都可以將結構資料轉化為ndarray,但是主要區別就是當資料來源是ndarray時,array仍然會copy出乙個副本,占用新的記憶體,但asarray不會。

4、numpy.intersect1d

numpy.intersect1d(ar1, ar2, assume_unique=false)

求兩個陣列的交集.

返回非重複的有序陣列,陣列成員同時在ar1, ar2中

引數:ar1, ar2 : array_like

assume_unique : bool值

assume_unique 如果為真,輸入的陣列ar1和ar2的元素不重複 ,這樣可以加速計算,assume_unique預設為假。

比如:np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])

array([1, 3])

在多於兩個序列時經常要結合reduce()函式一起使用(to intersect more than two arrays, use functools.reduce):

np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])

#array([1, 3])

在多於兩個序列時經常要結合reduce()函式一起使用(to intersect more than two arrays, use functools.reduce):

from functools import reduce

reduce(np.intersect1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))

#array([3])

5、reduce()函式

python中的reduce內建函式是乙個二元操作函式,他用來將乙個資料集合(鍊錶,元組等)中的所有資料進行下列操作:用傳給reduce中的函式 func()(必須是乙個二元操作函式)先對集合中的第1,2個資料進行操作,得到的結果再與第三個資料用func()函式運算,最後得到乙個結果。

如:

def myadd(x,y):  

return x+y

sum=reduce(myadd,(1,2,3,4,5,6,7))

print(sum)

#結果就是輸出1+2+3+4+5+6+7的結果即28

當然,也可以用lambda的方法,更為簡單:

sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))  

print sum

在python 3.0.0.0以後, reduce已經不在built-in function裡了, 要用它就得from functools import reduce.

6、numpy: np.logical_and/or/not (邏輯與/或/非)

np.logical_and (邏輯與)

np.logical_and(x1, x2, *args, **kwargs)
test

>>> np.logical_and(true, false)

false

>>> np.logical_and([true, false], [false, false])

array([false, false], dtype=bool)

>>> x = np.arange(5)

>>> np.logical_and(x>1, x<4)

array([false, false,  true,  true, false], dtype=bool)

np.logical_or (邏輯或)

np.logical_or(x1, x2, *args, **kwargs)
test

>>> np.logical_or(true, false)

true

>>> np.logical_or([true, false], [false, false])

array([ true, false], dtype=bool)

>>> x = np.arange(5)

>>> np.logical_or(x < 1, x > 3)

array([ true, false, false, false,  true], dtype=bool)

np.logical_not (邏輯非)

logical_not(x, *args, **kwargs)
test

>>> np.logical_not(3)

false

>>> np.logical_not([true, false, 0, 1])

array([false,  true,  true, false], dtype=bool)

>>> x = np.arange(5)

>>> np.logical_not(x<3)

array([false, false, false,  true,  true], dtype=bool)

Numpy學習之 一維陣列元素選取

ndarray的一維陣列的元素選取與python列表的切片操作很相似,與列表不同的時,獲取的資料組成乙個新陣列但與原有的陣列共享乙個記憶體儲存空間,即資料更改獲取得到的資料中某個元素的值,原有陣列也會產生相應變化。下面列舉其種常見的選取方式 首頁使用arange快速建立乙個一維陣列 coding u...

numpy學習(一) numpy基礎

此文為學習 理解numpy,numpy簡單入門教程整理的學習筆記 numpy是乙個功能強大的python庫,主要用於對多維陣列執行計算。numpy這個詞 於兩個單詞 numerical和python。a np.array 0,1,2,3,4 a np.array 0,1,2,3,4 1,2,3,4,...

numpy 學習日記(一)

莫名其妙的早就安裝了乙個numpy庫,未確定是否是個完整的庫,numpy.version.version 檢視版本號 基礎概念 物件是同種元素的多位陣列 維度稱為軸 軸的個數稱為秩 其提供矩陣運算功能,一般與scipy,matplotlib 建立陣列 numpy.array x x為列表list或t...