numpy 學習 第2篇:ndarray 基礎操做

numpy模塊內置的函數可以對數組進行復雜而高效的操做,這些函數中都有一個參數axis(軸)。在數組中,軸表示維度,對於二維數組,axis參數的取值一般有:html

  • 當axis爲None,表示把數組展開爲一維數組;
  • 當axis爲0時,表示按照列(第一維)進行計算;
  • 當axis=1時,表示按照行(第二維)進行計算。

一,排序sort

sort(axis,kind)函數用於對數組進行排序,可使用類方法numpy.sort(),返回的是數組的已排序的副本,而原始數組並無改變;也可使用對象方法obj.sort(),原始數組排序。git

numpy.sort(a, axis=1, kind='quicksort')

參數註釋:算法

  • a:所需排序的數組
  • axis:數組排序時的軸,axis=0排序;axis=1按行排序,默認值是1
  • kind:數組排序時使用的方法,其中:kind= ′quicksort ′爲快排;kind=′mergesort′ 爲歸併排序;kind=′heapsort′爲堆排
  • axis指定排序的軸;kind指定排序算法,默認的排序算法是快速排序,np.sort()返回的是數組的已排序的副本,而就是排序則會修改數組自己。

舉個例子,對數組進行排序:數組

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=np.sort(a)
r2=np.sort(a,axis=0)
r3=np.sort(a,axis=1)

print('a.sort() = {0}\na.sort(axis=0) = {1}\na.sort(axis=1) ={2}'.format(r1,r2,r3))

二,argsort()函數

argsort()函數返回的是按照數組值從小到大的索引值,即返回的是索引值,索引值是按照元素值從小到大獲得的。dom

x=np.array([1,4,3,-1,6,9])
y=np.argsort(x)
#output
array([3, 0, 2, 1, 4, 5], dtype=int64)

元素-1的值是最小的,其索引是3,所以,argsort()的返回列表中是第一個item。函數

argsort()函數是將x中的元素從小到大排列提取其對應的index(索引),而後輸出到y,按照降序排序:ui

y=np.argsort(-x)

按照升序排序:spa

y=np.argsort(x)

三,vectorize 向量化

numpy.vectorize()函數定義一個向量化函數,它以序列或numpy數組做爲輸入,對numpy數組作向量化操做。函數輸出的數據類型是由otypes參數肯定的,若是otypes=None,那麼輸出的數據類型是經過使用輸入的第一個元素調用函數來肯定的,該函數返回一個函數對象。code

numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)

參數註釋:orm

  • pyfunc:函數對象
  • otype:輸出數據的類型(putput data type)

使用vectorize()定義一個向量化函數,對數組作向量化操做:

def myfunc(a, b):
    return a-b if a>b else a+b

vfunc = np.vectorize(myfunc)
vfunc([1, 2, 3, 4], 2)
#output array([3, 4, 1, 2])

四,reshap

reshap(array,newshape) :返回一個給定shape的數組的副本,例如,下面的代碼把一個一維數組轉換爲4行2列的二位數組:

a=np.arange(8)
np.reshape(a,(4,2))

五,flatten

返回展平數組,原數組不改變

a=np.arange(8)
b=np.reshape(a,(4,2))
b.flatten()

六,計算元素的和/積

numpy計算元素的和/積,在語法上類似。

1,求和

numpy對象的函數:sum(axis)

參數axis是軸,對於二維數組,axis的取值有None、0和1:

  • 當參數爲None時,把二維數組中的全部元素相加;
  • 當參數爲0時,把二維數組中,按照列對元素相加;
  • 當參數爲1時,把二維數組中,按照行對元素相加;

舉個例子,建立一個二維數組,按照行和列分別求和:

import numpy as np

a = np.array([[0, 2, 1]
              ,[0,1,0]])

r1=a.sum()
r2=a.sum(axis=0)
r3=a.sum(axis=1)

print('a.sum() = {0}\na.sum(axis=0) = {1}\na.sum(axis=1) ={2}'.format(r1,r2,r3))

2,求積

計算元素的積:prod(axis)

參數axis是軸,對於二維數組,axis的取值有None、0和1:

  • 當參數爲None時,把二維數組中的全部元素相乘;
  • 當參數爲0時,把二維數組中,按照列對元素相乘;
  • 當參數爲1時,把二維數組中,按照行對元素相乘;

舉個例子,建立一個二維數組,按照行和列分別求乘積:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.prod()
r2=a.prod(axis=0)
r3=a.prod(axis=1)

print('a.prod() = {0}\na.prod(axis=0) = {1}\na.prod(axis=1) ={2}'.format(r1,r2,r3))

七,計算統計量

對numpy對象計算,經常使用的統計量是:

  • mean(axis):計算元素的均值
  • var(axis):計算元素的方差
  • std(axis) :計算元素標準差
  • max(axis):計算元素的最大值
  • min(axis):計算元素的最小值
  • ptp(axis):計算元素的取值範圍,即最大值和最小值的差值
  • median(axis):計算元素的中位數

舉個例子,計算數組的均值:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.mean()
r2=a.mean(axis=0)
r3=a.mean(axis=1)

print('a.mean() = {0}\na.mean(axis=0) = {1}\na.mean(axis=1) ={2}'.format(r1,r2,r3))

八,最大值或最小值的索引

計算數組中最大值和最小值的索引:

  • argmax(axis):返回最大值的索引
  • argmin(axis):返回最小值的索引

舉個例子,返回數組中最小值的索引:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.argmin()
r2=a.argmin(axis=0)
r3=a.argmin(axis=1)

print('a.argmin() = {0}\na.argmin(axis=0) = {1}\na.argmin(axis=1) ={2}'.format(r1,r2,r3))

九,等差數列

使用 numpy.linspace() 建立等差數列函數

numpy.linspace(start, stop[, num=50[, endpoint=True[, retstep=False[, dtype=None]]]]])

返回在指定範圍內的均勻間隔的數字(組成的數組):

  • start - 起始點,
  • stop - 結束點
  • num - 元素個數,默認爲50,
  • endpoint - 是否包含stop數值,默認爲True,包含stop值;若爲False,則不包含stop值
  • retstep - 返回值形式,默認爲False,返回等差數列組,若爲True,則返回結果(array([`samples`, `step`])),
  • dtype - 返回結果的數據類型,默認無,若無,則參考輸入數據類型。
>>> import numpy as np
>>> np.linspace(-3,3,11)
array([-3. , -2.4, -1.8, -1.2, -0.6,  0. ,  0.6,  1.2,  1.8,  2.4,  3. ])

十,分箱

按照bins(順序)分箱數組,把數據點劃分到不一樣的分箱中,並返回分箱的索引:

numpy.digitize(data,bins)

十一,隨機數生成

numpy.random模塊是對Python內置的random的升級,增長了一些用於搞笑生成多種機率分佈的樣本值的函數。

經常使用的numpy.random模塊的函數:

  • seed:肯定隨機數生成器的種子
  • permutation:返回一個序列的隨機排列
  • shuffle:對一個序列就地進行隨機排列
  • rand:產生均勻分佈的樣本值
  • randint:從給定的上下限範圍內隨機選取正數
  • randn:產生標準正態分佈
  • binomial:產生二項分佈的樣本值
  • normal:產生高斯正態分佈的樣本值
  • beta:產生Beta分佈的樣本值
  • chisquare:產生卡方分佈的樣本值
  • gamma:產生伽馬分佈的樣本值
  • uniform:產生在[0,1]範圍中均勻分佈的樣本值

例如,使用normal獲得一個標準正態分佈的4x4樣本數組:

samples=np.random.normal(size=(4,4))

 

 

 

 

 

 

參考文檔:

numpy中sum(axis=0)和axis=1的計算原理

相關文章
相關標籤/搜索