Numpy應用100問


  對於從事機器學習的人,python+numpy+scipy+matplotlib是重要的基礎;它們基本與matlab相同,而其中最重要的當屬numpy;因此,這里列出100個關於numpy函數的問題,希望讀者通過“題海”快速學好numpy;題中示例可以粘貼運行,讀者可以邊執行邊看效果;

 

1  如何引入numpy?

  import numpy as np(或者from numpy import *)

2  如何定義一個數組?

 import numpy as np

 x = np.array([[1,2,3],[5,6,7],np.int32])

 y = x[.,1]                   # 取出x的一列,y = [2,6]

3 實部和虛部如何提取?

 x = np.array([ 1+2j, 3 + 4j, 5+6j] )

 >> x.imag                  # x.imag就是x集合中取出的虛部的集合

 >> array([ 2., 4., 6.])

 >> x.imag = [4,8,12]  # 將集合x.imag一次賦值

4 序列如何排序?

>> x = [3,4,1,2,5]

>> x.argsort()

>> [2,3,0,1,4]             # 排序后的序列下標

5 何為矩陣的坐標軸axis=0或axis=1是啥?

 axis = 0 是指按照列方向,axis = 1是按照行方向(操作)。

6 如何用choose函數?

>> x = np.arange(25).reshape(5,5)     # 定義矩陣x[5][5]

array( [

   [ 0, 1, 2, 3, 4],
   [ 5, 6, 7, 8, 9],
   [10, 11, 12, 13, 14],
   [15, 16, 17, 18, 19],
   [20, 21, 22, 23, 24]  

  ] )

>>np.choose([1,2,1,2,1],x)                # 選擇x的[1,2,1,2,1]行對應數

>>[5,11,7,13,9]

再如:

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

b = np.array([12,-11,8,7])

np.choose( a, b )

>> 

array([[ 12, -11, 8],                          # 取a的架構,用b的item填寫
[ 8, 7, 12],
[-11, 12, -11]])

7  何為裁剪clips函數?

是按照一個范圍剪切數組;

8  何為all和any函數?

all和any函數測試兩個矩陣的元素;當全部相等用all,部分相等用any;

示例:

   a =  np.arange(15).reshape(3,5)

   b = a.copy()

   (a ==b).all()

   >>True

9  何為argmax和argmin,argsort函數?

argmax和argmin返回矩陣中,最大元或最校元的下標;argsort返回矩陣排序的下標;其中可選坐標橫向或縱向;

10 何為compress 函數?

 a =  np.arange(15).reshape(3,5)

 np.compress([True,False,True],a,axis=0)    #此處為行方向,取0,2向量構成的矩陣

>>

array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])

11 如何求共軛復數conjugate函數?

 np.conjugate(1+3j)

>> 1-3j

12 copy函數是啥?

a = b.copy()或 a = np.copy(b)   #生成b的副本,賦值給a

13 何為cumprod乘積?

b = array([3,8,9])

np.cumprod(b)        #該乘積是將[a,b,c]轉換成[a,a*b,a*b*c]的乘積

>>[3,24,216]

另:

a = array([[1, 2, 3],
[4, 5, 6]])

np.cunprod(a)

>>

array([ 1, 2, 6, 24, 120, 720])

14 何為cumsum和?

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

cumsum(b)                            #累計的和數列,類似於階乘的數列

array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66])

15 何為diagonal函數?

求一個矩陣的主對角元素組成的數列。

a = array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])

diagonal(a)

>>

array([0,6,12)     #注意,不論是否方陣;

 

16 何為dot函數?

dot是兩個矩陣相乘的函數,當矩陣為一維時,是向量內積,二維的是矩陣相乘;

 

17何為mean函數?

就是對矩陣所有元求平均;

 

18何為nonzero函數?

nonzero(a)返回a中非零數據項的下標;

 a = array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],
[ 0, 11, 12, 0, 14]])

nonzero(a)

 >>

(array([0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2], dtype=int64),
array([1, 2, 3, 4, 0, 1, 2, 3, 4, 1, 2, 4], dtype=int64))

另:(a〉3).nonzero()     #表示大於3的數的下標

 

19 何為prod函數?

就是將矩陣所有元素相乘;

a = array([ 0, 1, 2, 3, 4])

prod(a)

>> 24

 

20 何為ptp函數?

是指矩陣按照某個軸上最大值和最小值得差,即數據gap范圍;

 

21 何為put函數?

將指定下標的元素,賦值為其它值;

 

22 何為ravel函數?

將矩陣扁平化,即轉換成一維排列;參見ndarray的flat和flaten函數;

 

23 何為repeat函數?

將矩陣每個元素重復n遍,放入一維序列中;

a = array([[1,2],[4,5])

np.repeat(a,2)    #將a的元素重復2次

>> array([1,1,2,2,4,4,5,5])

 

24 何為reshape函數?

將矩陣所有元素重新排列,構成新的矩陣;數據不變;

如:a = np.arange(12).reshape(3,4)

 

25 何為resize函數?

構成新的矩陣;數據可變;

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

np.resize(a,[2,3])

>>

array([[1,2,3],[1,2,3]])

 

26 函數searchsorted的作用

若存在一個數,和一個排序向量;求該數在排序向量對應的下標;

np.searchsorted([1,2,3,4,5], 3)

>>

2

np.searchsorted([1,2,3,4,5], [3,-1,8])

>>

[2,0,5]

 

27 函數sort的用法

對矩陣排序,分兩種:軸排序,扁平(無軸)排序

>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a)                  # sort along the last axis
array([[1, 4],            
[1, 3]])
>>> np.sort(a, axis=None) # sort the flattened array
array([1, 1, 3, 4])
>>> np.sort(a, axis=0)      # sort along the first axis
array([[1, 1],
[3, 4]])

 

28 函數squeeze(a)如何用?

將一個具有冗余多維的向量,壓縮成一維的向量;

>>> x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
>>> np.squeeze(x).shape
(3,)

 

29 函數std()用法?

對矩陣各元素,求出標准均方差;

 

30 函數sum()用法?

對矩陣的所有函數進行求和。

>>> np.sum([0.5, 1.5])

2.0
>>> np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32)
1
>>> np.sum([[0, 1], [0, 5]])
6
>>> np.sum([[0, 1], [0, 5]], axis=0)
array([0, 6])
>>> np.sum([[0, 1], [0, 5]], axis=1)
array([1, 5])

 

31 函數swapaxes的用法?

  swapaxes(): 將n個維度中任意兩個維度(坐標軸)進行調換

 

32 函數take的用法?

 numpy.take(a, indices, axis=None, out=None, mode=’raise’)

該函數從a中取出indices下標所對應的元素;

>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])

 

33 函數trace的用途?

numpy.trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None)

求矩陣對角線元素的和;

 

34 矩陣的transpose函數?

numpy.transpose(a, axes=None)

上述給出a矩陣的轉置矩陣;

 

35 函數var是什么?

numpy.var(a, axis=None, dtype=None, out=None, ddof=0)

是求出某個軸向的方差;

 

36 何為矩陣的切割Slicing?

就是將矩陣通過[i:j:k]轉換的新矩陣,i是起始下標,j是終了下標,k是步長;這些下標都能為負;

如:

>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x[1:7:2]
array([1, 3, 5])

>>> x[1:7:1]
array([1, 2, 3, 4, 5, 6])

 

 37 如何求一個向量的轉置?

a = np.array([1,2,3]) 的轉置依舊是它本身

b = np.array([ [1,2,3] ])的轉置是

array [[1],

         [2],

         [3] ]

要想從a求出列向轉置需要:

a[:,np.newaxis ] 這個語法,切記之

 

38 如何求行向量和列向量之和?

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

b = np.array([[x],[y]])

a + b = array([  [1+x,2+x,3+x], [1+y,2+y,3+y] ])這就是規則!

 

39 如何將數據從文本文件讀入?

numpy.loadtxt(fnamedtype=<type 'float'>comments='#'delimiter=Noneconverters=Noneskiprows=0,usecols=Noneunpack=Falsendmin=0)[source]

 例子:

V1,V2 = np.loadtxt('datas.txt',dtype='float',delimiter=',',skiprows =1,usecols=[1,2],unpack = True)

參數解釋:

'datas.txt' ---文件名

dtype='float' ---數據格式

delimiter=',' ---分隔符逗號

skiprows =1 ---跳過第一行

usecols=[1,2] ---選第1,2列讀出

unpack = True ---讀出兩列將拆開,分別給V1和V2

converters=None   ---缺省數據用什么填充

 

40 如何將數據寫出到文本文件?

numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')

fname ---文件名
X ---寫出的數據表格

fmt='%.18e'   ---數據格式

delimiter=','   ---分隔符逗號

newline='\n'   ----換行

newline='\n'   ----表頭

footer=''        ----表尾 

comments='# '    注釋

 

41 linspace和arange區別?

x = np.linspace(0, 4*np.pi, 100) 在0-4pi中間有100個點
x = np.arange(0, 4*np.pi, 2) 在0-4pi中間每兩個點抽樣一次

 

42 newaxis如何使用?

關於newaxis是很難理解的東西,而矩陣變換中又常用,這里用形式表現之:

1:a = array([A,B,C])     這里ABC可能是數列,也可能是單獨數,當使用a[:,newaxis]時,一定是如下格式:

將a中的最外層不管,將次外層看成獨立元素,將他們加上“[]”,然后進行行排列

a[:,newaxis]等價於

[[A],

[B],

[C]]

2:a = array([A,B,C])     這里ABC可能是數列,也可能是單獨數,當使用a[newaxis,:]時,一定是如下格式:

在a上加外擴號:

a[newaxis,:] = array([ [A,B,C] ])

舉例:

 >>>print a.shape

(3L, 3L)

b = a[:,newaxis]

>>>print a[:,newaxis]

[[[0 1 3]]

[[4 5 6]]

[[7 8 9]]]

 >>>print b.shape

(3L, 1L, 3L)        //意思為三行,每行是[1,3]的矩陣

當 b = a[ newaxis,:]

>>>print b
[[[0 1 3]
[4 5 6]
[7 8 9]]]

>>>print b.shape

(1L, 3L, 3L)       //意思為1行,內部是[3,3]的矩陣;

 

43 如何構造一個hilbert矩陣?

構造10X10的希爾伯特矩陣,參考第42問,第38問:

X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])

 

44 何為logspace?

s = np.logspace(2.0, 3.0, num=3,base =4)

等價於

r =np.linspace(2,3,3)
l = 4**r

 

45 何為numpy.meshgrid(xy)?

用兩個1維向量變換出兩個矩陣X,Y,其規則如下:

對於向量 xy ,長度 Nx=len(x) 和 Ny=len(y), 返回矩陣XY 其中X 和 Y 形狀shape= (Ny, Nx) ,填充數據為 x的Ny重復, 后者為 y的Nx次重復.

例:

>>> X, Y = np.meshgrid([1,2,3], [4,5,6,7]) >>> X array([[1, 2, 3],  [1, 2, 3],  [1, 2, 3],  [1, 2, 3]]) >>> Y array([[4, 4, 4],  [5, 5, 5],  [6, 6, 6],  [7, 7, 7]])

 46 何為mgrid?

也是一種從向量產生雙矩陣的方法,如下:

>>> np.mgrid[0:5,0:5]
array([[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]],
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]])
>>> np.mgrid[-1:1:5j]
array([-1. , -0.5, 0. , 0.5, 1. ])

 

47 如何numpy.ravel實現矩陣扁平化?

>>> x = np.array([[1, 2, 3], [4, 5, 6]]) >>> print(np.ravel(x)) [1 2 3 4 5 6]

48 如何理解np.nditer(a)

請看代碼:

>>> a = np.arange(6).reshape(2,3)
>>> for x in np.nditer(a):
...     print x,
...
0 1 2 3 4 5

上述代碼中,np.nditer(a)將a的元素扁平化后存入對象np.nditer中,然后讀取出來,注意np.nditer不是個列表,是對象;不可用print np.nditer(a)打印出來;用時要注意;

 

49 如何實現數組元素無差別函數變換?

所謂無差別函數操作就是將每一個元素按照同樣變換方式,並寫回;比如a中的元素都乘2,這是比較簡單的變換,常規通過a *=2就能完成,但是變換如果很復雜,比如每個元素求自然對數,就無法簡單表示,因此需要下列代碼完成:

>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> for x in np.nditer(a, op_flags=['readwrite']):
...     x[...] = 2 * x
...
>>> a
array([[ 0,  2,  4],
       [ 6,  8, 10]])

注意打開讀寫標志op_flags=['readwrite'],x[...]不可寫成x;因為x是從對象中讀出的臨時變量;而x[...]是當前臨時變量x所面向的數組內地址,用以指明當前x寫到哪里。

 

50 什么是class numpy.ndenumerate(arr)?

ndenumeratenditer類似,只是ndenumerate不返回元素的值,返回的全是下標;下標有兩組,一組是數組的(Nx和Ny)另一組是nditer的順序標號;與nditer同,不可用print np.ndenumerate(a)打印;

>>> a = np.arange(6).reshape(2,3)

>>> for index, x in np.ndenumerate(a):
    ...:     print(index, x)
    ...:    
((0, 0), 0)
((0, 1), 1)
((0, 2), 2)
((1, 0), 3)
((1, 1), 4)
((1, 2), 5)

 

51 如何理解np的mean函數的axis?

關於numpy mean函數的axis參數,理解多維矩陣的"求和"、"平均"操作確實太惡心了,numpy提供的函數里還有一堆參數,搞得暈頭轉向的,這里做個筆記,提醒一下自己, 下面是例程

import numpy as np X = np.array([[1, 2], [4, 5], [7, 8]]) print np.mean(X, axis=0, keepdims=True) print np.mean(X, axis=1, keepdims=True)

結果是分別是

                 [[ 1.5] [[ 4. 5.]] [ 4.5] [ 7.5]]

我個人比較raw的認識就是,axis=0,那么輸出矩陣是1行,求每一列的平均(按照每一行去求平均);axis=1,輸出矩陣是1列,求每一行的平均(按照每一列去求平均)。還可以這么理解,axis是幾,那就表明哪一維度被壓縮成1。

再舉個更復雜點的例子,比如我們輸入為batch = [128, 28, 28],可以理解為batch=128,圖片大小為28×28像素,我們相求這128個圖片的均值,應該這么寫

m = np.mean(batch, axis=0)

輸出結果m的shape為(28,28),就是這128個圖片在每一個像素點平均值。

 

52 矩陣相關計算如何實現?

    1)定義:

a = np.matrix([     [1, 2, 3, 4], 
                             [5, 5, 6, 8],
                             [7, 9, 9, 1],
                              [4, 6, 7, 1]       ])

     2)加法減法

    #矩陣加減法:
    e = a + a   #or    e = a - a
                e = a + a轉置     #or    e = a.轉置+ a      a為向量時這里轉置是 a[:,np.newaxis ] 這個語法,切記之
    3)乘法
#矩陣乘法:
b = a * a                 #not matrix multiplication!
#or
c = np.dot(a, a)          #matrix multiplication
#or
d = a
np.dot(a, a, d)           #matrix multiplication
    4)轉置矩陣(transpose)
  g = a.transpose() 或h = a.T 等價
 
    5)逆矩陣(inverse)
                 f = np.linalg.inv(a)   或    f = a.I
                 f = a ** (-1)  求各元素倒數,不是求逆
      6)行列式(determinant)
         j = np.linalg.det(a)
 
    7)伴隨矩陣(adjoint)
        #(need more test)
         m = np.dot(np.linalg.det(a), np.linalg.inv(a)) # A-1 = A'' / |A|  ==>   A''= A-1|A|  
 
    8)矩陣范數(matrix norms)
          k = np.linalg.norms(a)

 53 如何初始化矩陣?
       Python使用NumPy包完成了對N-維數組的快速便捷操作。使用這個包,需要導入numpy。 SciPy包以NumPy包為基礎,大大的擴展了numpy的能力。為了使用的方便,scipy包在最外層名字空間中包括了所有的numpy內容,因此只要導入了scipy,不必在單獨導入numpy了!但是為了明確哪些是numpy中實現的,哪些是scipy中實現的,本文還是進行了區分。以下默認已經:import numpy as np 以及 impor scipy as sp
      下面簡要介紹Python和MATLAB處理數學問題的幾個不同點。1.MATLAB的基本是矩陣,而numpy的基本類型是多為數組,把matrix看做是array的子類。2.MATLAB的索引從1開始,而numpy從0開始。
1.建立矩陣
a1=np.array([1,2,3],dtype=int)   #建立一個一維數組,數據類型是int。也可以不指定數據類型,使用默認。幾乎所有的數組建立函數都可以指定數據類型,即dtype的取值。
a2=np.array([[1,2,3],[2,3,4]])   #建立一個二維數組。此處和MATLAB的二維數組(矩陣)的建立有很大差別。
同樣,numpy中也有很多內置的特殊矩陣:
b1=np.zeros((2,3))    #生成一個2行3列的全0矩陣。注意,參數是一個tuple:(2,3),所以有兩個括號。完整的形式為:zeros(shape,dtype=)。相同的結構,有 ones()建立全1矩陣。 empty()建立一個空矩陣,使用內存中的隨機值來填充這個矩陣。
b2=identity(n)   #建立n*n的單位陣,這只能是一個方陣。
b3=eye(N,M=None,k=0)    #建立一個對角線是1其余值為0的矩陣,用k指定對角線的位置。M默認None。
此外,numpy中還提供了幾個like函數,即按照某一個已知的數組的規模(幾行幾列)建立同樣規模的特殊數組。這樣的函數有 zeros_like()、empty_like()、ones_like(),它們的參數均為如此形式:zeros_like(a,dtype=),其中,a是一個已知的數組。
c1=np.arange(2,3,0.1)   #起點,終點,步長值。含起點值,不含終點值。
c2=np.linspace(1,4,10)    #起點,終點,區間內點數。起點終點均包括在內。同理,有logspace()函數
d1=np.linalg.companion(a)    #伴隨矩陣
d2=np.linalg.triu()/tril()   #作用同MATLAB中的同名函數
e1=np.random.rand(3,2)    #產生一個3行2列的隨機數組。同一空間下,有randn()/randint()等多個隨機函數
fliplr()/flipud()/rot90()    #功能類似MATLAB同名函數。
xx=np.roll(x,2)   #roll()是循環移位函數。此調用表示向右循環移動2位。
2.數組的特征信息
先假設已經存在一個N維數組X了,那么可以得到X的一些屬性,這些屬性可以在輸入X和一個.之后,按tab鍵查看提示。這里明顯看到了Python面向對象的特征。
X.flags    #數組的存儲情況信息。
X.shape    #結果是一個tuple,返回本數組的行數、列數、……
X.ndim   #數組的維數,結果是一個數
X.size    #數組中元素的數量
X.itemsize    #數組中的數據項的所占內存空間大小
X.dtype    #數據類型
X.T   #如果X是矩陣,發揮的是X的轉置矩陣
X.trace()    #計算X的跡
np.linalg.det(a)   #返回的是矩陣a的行列式
np.linalg.norm(a,ord=None)    #計算矩陣a的范數
np.linalg.eig(a)    #矩陣a的特征值和特征向量
np.linalg.cond(a,p=None)    #矩陣a的條件數
np.linalg.inv(a)    #矩陣a的逆矩陣
3.矩陣分解
常見的矩陣分解函數,numpy.linalg均已經提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些 算法為了方便計算或者針對不同的特殊情況,還給出了多種調用形式,以便得到最佳結果。
4.矩陣運算
np.dot(a,b)用來計算數組的點積;vdot(a,b)專門計算矢量的點積,和dot()的區別在於對complex數據類型的處理不一樣;innner(a,b)用來計算內積;outer(a,b)計算外積。
專門處理矩陣的數學函數在numpy的子包linalg中定義。比如 np.linalg.logm(A)計算矩陣A的對數。可見,這個處理和MATLAB是類似的,使用一個m后綴表示是矩陣的運算。在這個空間內可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常規exp()對應有三種矩陣形式:expm()使用Pade近似算法、 expm2()使用特征值分析算法、expm3()使用泰勒級數算法。在numpy中,也有一個計算矩陣的函數:funm(A,func)。
5.索引
numpy中的數組索引形式和Python是一致的。如:
x=np.arange(10)
print x[2]    #單個元素,從前往后正向索引。注意下標是從0開始的。
print x[-2]    #從后往前索引。最后一個元素的下標是-1
print x[2:5]    #多個元素,左閉右開,默認步長值是1
print x[:-7]    #多個元素,從后向前,制定了結束的位置,使用默認步長值
print x[1:7:2]   #指定步長值
x.shape=(2,5)    #x的 shape屬性被重新賦值,要求就是元素個數不變。2*5=10
print x[1,3]    #二維數組索引單個元素,第2行第4列的那個元素
print x[0]   #第一行所有的元素
y=np.arange(35).reshape(5,7)    # reshape()函數用於改變數組的維度
print y[1:5:2,::2]    #選擇二維數組中的某些符合條件的元素
 
54 矩陣加法的注意事項?
a =np.array([1,3,4,5,6])
s =np.array([[13],[4],[6]])
print( a )
print (s)
print(a+s)   #此處a和s可以交換

結果:
 [1 3 4 5 6]
 [[13]
 [ 4]
 [ 6]]
 [[14 16 17 18 19]
 [ 5  7  8  9 10]
 [ 7  9 10 11 12]]

 

55 logspace指數序列的產生?

>>> a = np.logspace(0,9,10,base=2)
>>> a
array([   1.,    2.,    4.,    8.,   16.,   32.,   64.,  128.,  256.,  512.])

每一項的形態是base=2的0-9次方序列

 

 56 numpy如何產生等比數列?

import numpy as np
np.logspace(2.0, 3.0, num=4) array([ 100. , 215.443469 , 464.15888336, 1000. ])

 

57 如何生成復雜矩陣?

通過形式函數是現,比如:

 b = np.fromfunction(lambda x,y,z:x*100+y*10+z,(3,3,3),dtype=int)  

 

 58 如何遍歷數組?

分三個辦法:

第一種,最常用的,通過for in遍歷數組 

colours = ["red","green","blue"]
 
for colour in colours:
    print colour

第二種,先獲得數組的長度,然后根據索引號遍歷數組,同時輸出索引號

colours = ["red","green","blue"]
 for i in range(0, len(colours)): 
print i, colour[i] 

 第三種 通過迭代器完成

 for element in b.flat:  
        print element,     

 

59 如何定義等距序列numpy.linspace?

函數原型numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

        start : scalar(標量值),表明序列起始數

        stop : scalar(標量值),序列終結位置, 若endpoint=True,序列包含end;若endpoint=False,序列不包含end;

   num:int 序列中元素個數

        endpoint : bool 如果是真,則一定包括stop,如果為False,一定不會有stop

        retstep : bool 如果真,將間隔步長也返回,否則,不返回步長

        dtype:數據的類型(int32,float32)

實例:

>>> import numpy as np
>>> np.linspace(1, 10, 10)
array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])
>>> np.linspace(1, 10, 10, endpoint = False)
array([ 1. ,  1.9,  2.8,  3.7,  4.6,  5.5,  6.4,  7.3,  8.2,  9.1])
In [4]: np.linspace(1, 10, 10, endpoint = False, retstep= True)
Out[4]: (array([ 1. ,  1.9,  2.8,  3.7,  4.6,  5.5,  6.4,  7.3,  8.2,  9.1]), 0.9)
 
 60 向量和矩陣的關系(newaxis改變)?

向量無論如何轉置,都是它本身;如:

s_data = np.linspace(-1,1,30) 
r_data = np.transpose(s_data)

在此,s_data和r_data 兩個向量完全一樣。而

x_data = np.linspace(-1,1,30)[:,np.newaxis]
y_data = np.linspace(-1,1,30)[np.newaxis,:]
就成了[30X1]和[1X30]的矩陣。


61 如何求矩陣的逆矩陣?
A = np.array( [[1,-2,1],[0,2,-1],[1,1,-2]] )
B = np.linalg.inv( A )
print(B)

62 求矩陣行列式
A = np.array( [[1,-2,1],[0,2,-1],[1,1,-2]] )
B = np.linalg.det( A )
print(B)

63 獲取張量的最小量對應的序號
當axis=None時,為張量展開成一維單列的序號,否則就是行向,或列向的若干序號。
a = np.array([ [7,5,6],
               [5,4,2],
               [7,3,6]])
print(np.argmin(a,axis=None))
64 將某個張量矩陣寫成二進制的位張量np.unpackbits
a = np.array([[2], [7], [23]], dtype=np.uint8)
>>> a array([[ 2],  [ 7],  [23]], dtype=uint8) b = np.unpackbits(a, axis=1) >>> b array([[0, 0, 0, 0, 0, 0, 1, 0],  [0, 0, 0, 0, 0, 1, 1, 1],  [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)
65  將某個張量改變形狀,但數值不變
numpy.reshape(a, newshape, order='C')
>>> a = np.array([[1,2,3], [4,5,6]]) >>> np.reshape(a, 6) array([1, 2, 3, 4, 5, 6]) >>> np.reshape(a, 6, order='F') array([1, 4, 2, 5, 3, 6]) 
 
          
>>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2 array([[1, 2],  [3, 4],  [5, 6]])

66 numpy.matrix系列函數
matrix.T Returns the transpose of the matrix.
matrix.H Returns the (complex) conjugate transpose of self.
matrix.I Returns the (multiplicative) inverse of invertible self.
matrix.A Return self as an ndarray object.
67  內存和文件的映射

  Memory-mapped file arrays

>>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000) >>> a[10] = 10.0 >>> a[30] = 30.0 >>> del a >>> b = fromfile('newfile.dat', dtype=float) >>> print b[10], b[30] 10.0 30.0 >>> a = memmap('newfile.dat', dtype=float) >>> print a[10], a[30] 10.0 30.0

 



?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM