日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Numpy应用100问

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(fname,?dtype=<type 'float'>,?comments='#',?delimiter=None,?converters=None,?skiprows=0,usecols=None,?unpack=False,?ndmin=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(x,?y)?

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

對于向量?x,?y?,長度?Nx=len(x)?和?Ny=len(y), 返回矩陣X,?Y?其中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)?

ndenumerate和nditer類似,只是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如何產生等比數列?

1

2

import numpy?as?npnp.logspace(2.0, 3.0, num=4)

array([? 100.??????? ,?? 215.443469? ,?? 464.15888336,? 1000.??????? ])

?

57 如何生成復雜矩陣?

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

1

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

?

?58 如何遍歷數組?

分三個辦法:

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

1

2

3

4

colours = ["red","green","blue"]

??

for?colour?in?colours:

????print colour

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

1

2

3

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.TReturns the transpose of the matrix.
matrix.HReturns the (complex) conjugate transpose of?self.
matrix.IReturns the (multiplicative) inverse of invertible?self.
matrix.AReturn?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

?

原文地址:https://www.cnblogs.com/gongdiwudu/p/6207975.html

總結

以上是生活随笔為你收集整理的Numpy应用100问的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。