主頁 > 後端開發 > 1.numpy入門介紹

1.numpy入門介紹

2020-10-20 09:28:37 後端開發

 NumPy(Numerical Python) 是 Python 語言的一個擴展程式庫,支持大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫,NumPy 是一個運行速度非常快的數學庫,主要用于陣列計算,包含:一個強大的N維陣列物件 ndarray;廣播功能函式;整合 C/C++/Fortran 代碼的工具;線性代數、傅里葉變換、亂數生成等功能等,

NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用于替代 MatLab,是一個強大的科學計算環境,有助于我們通過 Python 學習資料科學或者機器學習,SciPy 是一個開源的 Python 演算法庫和數學工具包,SciPy 包含的模塊有最優化、線性代數、積分、插值、特殊函式、快速傅里葉變換、信號處理和影像處理、常微分方程求解和其他科學與工程中常用的計算,

Matplotlib 是 Python 編程語言及其數值數學擴展包 NumPy 的可視化操作界面,它為利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向應用程式嵌入式繪圖提供了應用程式介面(API),

numeric python 數字化的python()

numpy中最重要的一個形式叫ndarray:n dimension array 工程數學(線性代數)?,零維度:標量  1;一維:向量   [1,2,3,4,5,6];二維:矩陣   A=[[1,2,3],[1,2,3]]  A.shape(2x3);三維及以上:張量  ,Python 本身支持的數值型別有 int(整型,python2 中存在 long 長整型)、float(浮點型)、bool(布爾型) 和 complex(復數型),?而 Numpy 支持比 Python 本身更為豐富的數值型別,細分如下:?

 1 '''
 2 1. bool:布爾型別,1 個位元組,值為 True 或 False,
 3 2. int:整數型別,通常為 int64 或 int32 ,
 4 3. intc:與 C 里的 int 相同,通常為 int32 或 int64,
 5 4. intp:用于索引,通常為 int32 或 int64,
 6 5. int8:位元組(從 -128 到 127) tinyint(tinyint 1位元組 -2 ^7 ~ 2^7-1 (-128~127))
 7 6. int16:整數(從 -32768 到 32767) smallint(smallint 2位元組 -2 ^15 ~ 2^15-1 (-32768~32765))
 8 7. int32:整數(從 -2147483648 到 2147483647) int(int 4位元組 -2 ^31~ 2^31-1 (-2147483648~2147483647))
 9 8. int64:整數(從 -9223372036854775808 到 9223372036854775807) bigint(bigint 8位元組 -2 ^63 ~ 2^63-1)
10 9. uint8:無符號整數(從 0 到 255) unsigned
11 10. uint16:無符號整數(從 0 到 65535)
12 11. uint32:無符號整數(從 0 到 4294967295)
13 12. uint64:無符號整數(從 0 到 18446744073709551615)
14 13. float:float64 的簡寫,
15 14. float16:半精度浮點,5 位指數,10 位尾數
16 15. float32:單精度浮點,8 位指數,23 位尾數
17 16. float64:雙精度浮點,11 位指數,52 位尾數
18 17. complex:complex128 的簡寫,
19 18. complex64:復數,由兩個 32 位浮點表示,
20 19. complex128:復數,由兩個 64 位浮點表示,
21 '''

在 Numpy 中,上面提到的這些數值型別都被歸于 dtype(data-type資料型別) 物件的實體,?我們可以用 numpy.dtype(object, align, copy) 來指定數值型別,而在陣列里面,可以用 dtype= 引數,

 

numpy創建陣列:

1). np.ndarray(shape [, dtype] ):隨機生成一個ndarray,

2). np.array(object [dtype=None, copy=True, order=None, subok=False, ndmin=0] ):串列或元組轉換為ndarray陣列;object:表示串列或元組等,dtype:資料型別(如未給出,則型別為被保存物件所需的最小型別),copy:布爾來寫,默認 True,表復制物件,

3). np.arange(start, stop [, step, dtype=None] ):生成一個有規律增長的一維陣列,在給定區間內創建一系列均勻間隔的值,[開始,停止)半開半閉區間,step:步長用于設定值之間的間隔,dtype可以設定回傳ndarray 的值型別,

4). np.linsapce(start, stop [, num=50, endpoint=True, retstep=False, dtype=None] ):生成一個有規律增長的一維陣列,和arange方法很像,在指定的區間內回傳間隔均勻的值,全閉區間,start:序列的起始值; stop:序列的結束值;num:生成的樣本數,默認值為50;endpoint:布林值,如果為真,則最后一個樣本包含在序列內;retstep:布林值,如果為真,回傳間距;dtype:陣列的型別,

5). np.ones(shape[, dtype=None, order='C']):生成一個元素全部都為1的陣列;shape:用于指定陣列形狀,例如(1,2)或 3, dtype:資料型別, order:{'C','F'},按行或列方式儲存陣列,

6). np.zeros(shape, dtype=None, order='C'):生成一個元素全部為0的陣列 ,zeros 方法和 ones 方法非常相似,

7). np.full(shape,fill_value=https://www.cnblogs.com/bonheur/p/num):自定義填充值的陣列;用于創建一個自定義形狀的陣列,可以自己指定一個值,該值填滿整個矩陣 ,

8). np.eye(N, M=None, k=0, dtype=<type 'float'>):生成一個單位矩陣,創建一個二維陣列,N:輸出陣列的行數, M:輸出陣列的列數,
 其特點是k 對角線上的值為 1,其余值全部為0,k表示從下標第幾個開始, k:對角線索引:0(默認)是指主對角線,正值是指上對角線,負值是指下對角線,

9). np.random.randint(low,high,size):生成隨機的整數型矩陣,low 表示最小值, high表示最大值,size 是一個元祖型別  size = shape,

10). np.random.randn( ):生成標準的正太分布,沒有固定的引數,每多加一個數字,代表多增加一個維度,高斯正太分布=高斯分布 ,分布:是統計學中的,標準的高斯分布 的中間值是0 ,最好的范圍是1 -1,超出范圍的都是例外值,

11). np.random.random(size):生成0-1之間的元素陣列,size 表形狀,random隨即生產的范圍是0-1之間,每個亂數都是一個維度,

12). np.random.rand( ):生成0-1之間的元素陣列,和 np.random.random有一樣的功能,random 需要 size來描述形狀,而rand只需要我們直接給值,通過值的數量來確定形狀,

13). np.random.normal(loc,scale,size):生成一個正太分布的陣列,location 是定位的的值, scale 是波動值,size 是資料長度,

14). np.logspace(start,stop,num,base=10.0):生一個有規律的求對數的一維陣列 ,線性生成,全閉區間,start從幾開始 ,stop 到數字結尾, num生成多少個數 默認50,base是底數 默認以10為底,

15). np.diag(v,k=0):生成一個對角矩陣,v可以是一維或二維的矩陣,k<0表示斜線在矩陣的下方,k>0表示斜線在矩陣的上方,

 

代碼演示示例:

 1 import numpy as np
 2 
 3 # 1.隨機生成一個ndarray
 4 np.ndarray(shape=(5,4,3),dtype=np.uint8)
 5 
 6 # 2.將串列或元組轉換為 ndarray 陣列
 7 arr1 = np.array([1, 2, 3, 4, 5])            # array([0, 1, 2, 3, 4])
 8 arr2 = np.array((1,2,3,4,5))                # array([0, 1, 2, 3, 4])
 9 np.array(range(5))                          # array([0, 1, 2, 3, 4])
10 
11 # 3.生成一個有規律增長的一維陣列,左閉右開區間
12 np.arange(0,10,2,np.float16)                # array([0., 2., 4., 6., 8.], dtype=float16)
13 
14 # 4.生成一個有規律增長的一維陣列,全閉區間
15 np.linspace(0,10,num=10,dtype='uint8')      # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8, 10], dtype=uint8)
16 
17 # 5.生成一個元素全部都為1的陣列
18 np.ones((10,10))                            # 十行十列全部為 1 的多維陣列
19 
20 # 6.生成一個元素全部為0的陣列
21 zeros = np.zeros((3,3))                     # 三行三列全為 0 的陣列
22 
23 # 7.自定義填充值的陣列
24 np.full((3,3),'你好')                        # 三行三列全為‘你好’的陣列,dtype='<U2'
25 
26 # 8.生成一個單位矩陣
27 I = np.eye(3)                               # 三行三列對角線為1,其余全為 0 的陣列
28 
29 # 9.生成隨機的整數型矩陣
30 np.random.randint(low=10,high=150,size=(5,4))  # 生成10-150之間的五行四列整數陣列
31 
32 # 10.標準的正太分布
33 np.random.randn(3,3)                       # 三行三列-1~1之間的陣列
34 
35 # 11./12.生成0-1之間的元素陣列
36 np.random.random(size=(3,3))                # 三行三列0-1之間的元素陣列
37 np.random.rand(3,3)                         # 三行三列0-1之間的元素陣列
38 
39 # 13.生成一個正太分布的陣列
40 np.random.normal(10,scale=10,size=(3,3))    # 生成0-20之間的數,三行三列有例外值的陣列
41 
42 # 14.生一個有規律的求對數的一維陣列 
43 np.logspace(0,49,base=10.0)                 # 生成50個0-49之間的以10為底的陣列
44 #   np.log2(N):底數為二的對數
45 #   np.log10(N):為10的對數
46 
47 # 15.生成一個對角矩陣
48 np.diag([1,2],k=-1)                         # array([[0, 0, 0],
49                                             #        [1, 0, 0],
50                                             #        [0, 2, 0]])   

【補充】:

range()是一個可迭代物件;arange()直接生成一個陣列型別

字典可以轉變為陣列,但是無法使用;arr=np.array({'a':1,"b":2})

零矩陣 = 代數中的0,單位矩陣=代數中的1;主對角線上全為1的矩陣是單位矩陣,單位矩陣必定是一個方陣

線性代數的乘法;線性代數中有+ — × 但是沒有除法(逆矩陣),*只能做普通代數乘法,矩陣的乘法是 np.dot(A,B),np.dot():線性代數的乘法,A*B != B*A

 

numpy中的屬性:

 1 '''
 2 ndarray.size:查看元素的總量   *****
 3 ndarray.ndim:查看陣列的維度
 4 ndarray.shape:查看陣列的形狀  *****
 5 ndarray.dtype:查看資料型別    *****
 6 ndarray.imag:獲取復數的虛數部分
 7 ndarray.real:獲取復數的實數部分
 8 ndarray.T:陣列的轉置
 9 ndarray.itemsize:查看陣列占用的位元組數
10 ndarray.nbytes:查看陣列中每個元素總和的位元組數
11 ndarray.strides:數字的遞進位元組數  資料步長  *****
12 ndarray.transpose():陣列的轉置
13 ndarray.astype():轉變資料型別,但是不會對原資料產生影響
14 '''

 

numpy的索引:

一維陣列與串列一樣;numpy的索引支持層級索引;index可以重復

 1 B = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
 2 B  # array([[[1, 2, 3],     
 3              [4, 5, 6],
 4              [7, 8, 9]]])
 5 B[0][0][0]   # 1  取出第一行第一列
 6 B[0,0,0]     # 1  取出第一行第一列,這樣的層級索引list不支持
 8 
 9 nd = np.arange(10,20)
10 nd                  # array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])  
11 nd[[0,0,0,1,0,0]]   # array([10, 10, 10, 11, 10, 10]) 里面是索引,使用串列的方式可以重復的去獲取

 

重設形狀 reshape:

reshape 可以在不改變陣列資料的同時,改變陣列的形狀;numpy.reshape(nd,shape) == array.reshape(shape) ;該函式不對原陣列產生影響,元素的總量不能改變;如果在reshape寫上-1,代表剩余的元素數量;nd.reshape(-1):表示陣列的展開,

 1 nd = np.arange(10,20)
 2 nd.shape                 # (10,)
 3 # np.reshape(nd,(2,5)) 相當于 np.reshape(nd,(-1,5)) 相當于nd.reshape((2,5))
 4 np.reshape(nd,(2,5))     #array([[10, 11, 12, 13, 14],
 5                          #       [15, 16, 17, 18, 19]])
 6 # nd.reshape(5,2) 相當于 nd.reshape(5,-1)   
 7 nd.reshape(5,2)
 8        # array([[10, 11],
 9        #       [12, 13],
10        #       [14, 15],
11        #       [16, 17],
12        #       [18, 19]])

 

陣列展開 ravel:無論是幾維的陣列,直接展開變為一維,ndarray.ravel()  ;陣列的展開,變成一維陣列ndarry.reshape(-1) ,

 

級聯 concatenate:

級聯就是將多個陣列進行合并,axis:軸,axis=1,列合并,行必須相等 x軸的事;axis=0,行合并,列必須相等 y軸的事;np.concatenate((a1,a2,...)):需要被合并的陣列可以放在元祖中;np.concatenate([a1,a2,...]):也可以放在串列中,

堆做級聯 hstack|vstack,hstack:水平的合并;vstack:垂直的合并,這兩個函式中沒有axis引數,填入的引數必須被小括號或中括號包裹,水平 np.hstack((nd1,nd2));垂直 np.vstack([nd1,nd2]),

副本:所有賦值運算不會為ndarray的任何元素創建副本,對賦值后的物件的操作也對原來的物件生效,可使用ndarray.copy()函式創建副本,

 

聚合函式:

 1 # axis:軸,軸的排序y-x-z = 0,1,2
 2 # 每一個聚合函式中都有axis,我們可以對指定的維度進行計算
 3 '''
 4 np.sum():求和
 5 np.nansum():將NaN當作0處理
 6 np.max():求最大值
 7 np.min():求最小值
 8 np.mean():均值
 9 np.argmax():找出最大值的索引
10 np.argmin():找出最小值的索引
11 np.std():求標準差
12 np.var():方差
13 np.argwhere():條件查詢,并回傳符合條件的索引(最好能展開)
14 '''

 

代碼演示示例:

 1 # 一維陣列
 2 nd1 = np.random.randint(0,10,10)
 3 np.sum(nd1)
 4 nd1.sum()
 5 ?
 6 # 二維的陣列
 7 nd2 = np.random.randint(0,100,(5,4))
 8 nd3.sum()                      # 求陣列元素的總和
 9 nd3.sum(axis=0)                # 將行的值全加和,得到的是列的個數
10 nd3.sum(axis=1)                # 將列的值全加和,得到的是行的個數
11 ?
12 # 三維的陣列
13 nd3 = np.random.randint(0,100,(5,4,3))
14 nd3.sum(axis=-1)               # 求最和一維的和
15 nd3.sum(axis=-1).sum(axis=-1)  # 求最后兩維的和
16 nd3.sum(axis=(-1,-2))          # 求最后兩維的和,axis支持元祖型別的值
17 ?
18 # 求最大值
19 nd3.max()
20 nd3.min(axis=-1)               # 最后一維
21 np.max(nd3,axis=-1)            # 最后一維
22 ?
23 # 求平均值
24 nd3.mean()
25 ?
26 # 回傳的是最小數的下標,第一個出現的
27 np.argmin(np.array([0,1,2,3,4,5,6,7,8,9,10,0,0,]))     # 0
28 # 回傳的是最大數的下標,第一個出現的
29 np.argmax(np.array([1,2,3,4,5,6,7,8,9,10,10,10]))      # 9
30 ?
31 # argwhere是條件查詢的方法,回傳符合條件的索引
32 A = np.random.randint(0,100,(4,4))
33 display(A) 
34      # array([[88, 21, 57, 99],
35      #           [54, 10, 42, 92],
36      #           [93,  0,  1, 88],
37      #           [50, 23, 34, 49]])
38 
39 index = np.argwhere(A.ravel()>=50)
40 index.ravel()                 # array([ 0,  2,  3,  4,  7,  8, 11, 12], dtype=int64)
41 
42 # 要想查找某個制定的值,我們可以先展開陣列,再展開索引
43 A.ravel()                     # array([88, 21, 57, 99, 54, 10, 42, 92, 93,  0,  1, 88, 50, 23, 34, 49])
44 A.ravel()[index.ravel()]      # array([88, 57, 99, 54, 92, 93, 88, 50])
45 ?
46 # 另一種方式
47 cond = A.ravel()>=50
48 cond       # array([ True, False,  True,  True,  True, False, False,  True,  True, False, False,  True,  True, False, False, False])
49 #如果索引是bool型,值回傳結果為True的
50 A.ravel()[cond]      # array([61, 93, 53, 76, 88, 66, 96, 76, 77, 88, 92, 84, 50, 98])

 

注意:NaN != NaN;NaN + 任何數 = NaN

  

陣列元素的回圈:

 1 # 串列
 2 list_ = [0, 1, 2]
 3 list_*3           # list會回圈3次 , [0, 1, 2, 0, 1, 2, 0, 1, 2]
 4 #list_ + 3        # 會報錯
 5 
 6 # 數祖
 7 ndarr =  np.array(range(10))
 8 ndarr             # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 9 ndarr*3           # array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])  向量 × 標量
10 ndarr+3           # array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
11 ndarr/3           # array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0])
12 np.tile(ndarr,3)  # 將所有的元素回圈3次,array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
13 
14 # 二維陣列
15 ndarr2 = np.random.randint(0,10,(3,3))
16 ndarr2
17         #array([[7, 7, 8],
18         #       [2, 2, 5],
19         #       [5, 7, 4]])
20 np.tile(ndarr2,3)
21         #array([[7, 7, 8, 7, 7, 8, 7, 7, 8],
22         #       [2, 2, 5, 2, 2, 5, 2, 2, 5],
23         #       [5, 7, 4, 5, 7, 4, 5, 7, 4]])
24 
25 np.repeat(ndarr2,3)         # array([7, 7, 7, 7, 7, 7, 8, 8, 8, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 7, 7, 7, 4, 4, 4])
26 np.repeat(ndarr2,3,axis=0)  # 行增加
27 #     array([[7, 7, 8],
28 #           [7, 7, 8],
29 #           [7, 7, 8],
30 #           [2, 2, 5],
31 #           [2, 2, 5],
32 #           [2, 2, 5],
33 #           [5, 7, 4],
34 #           [5, 7, 4],
35 #           [5, 7, 4]])
36 np.repeat(ndarr2,3,axis=1)  # 列增加
37 #    array([[7, 7, 7, 7, 7, 7, 8 , 8 , 8],
38 #           [2, 2, 2, 2, 2, 2, 5 , 5 , 5],
39 #           [5, 5, 5, 7, 7 , 7, 4 , 4 , 4]])

 

ndarray的矩陣操作:

算術運算子:加減乘除,ndarray.dot():矩陣乘法,ndarray.multiply():普通乘法 ,np.add():加法,要求行列相同,np.linalg.inv():逆矩陣,

np.add(nd1,nd2)  ==  nd1+nd2   :   普通的加法,將兩個矩陣的對應位置進行相加,行列相同

nd1 + 3   :  普通的加法,將矩陣的每個位置都加3

nd1 - 3   :  普通的加法,將矩陣的每個位置都減3

nd1*nd2  ==  np.multiply(nd1,nd2)  : 是普通的乘法,將兩個矩陣的對應位置進行相乘法,不是矩陣的乘法

nd1/2  :  普通的除法,將兩個矩陣的對應位置都除以2

np.dot(nd1.T,nd2)   #矩陣乘法np.dot()    4*5 dot  5*4 = 4*4
np.dot(nd1,nd2.T)     #矩陣乘法np.dot()    5*4 dot  4*5 = 5*5

矩陣的算術中沒有除法,只有逆矩陣,

滿秩矩陣(一定要是一個方陣,一個方陣不一定是滿秩矩陣,可能是奇異矩陣:a = np.matrix([[1,2],[3,4]])

逆矩陣 : 矩陣自己 × 自己的逆  = 單位 1

a = np.matrix([[1,2],[3,4]])        -------.>   a_inv = np.linalg.inv(a) -------->    np.dot(a,a_inv)    #  1

廣播機制:廣播機制值得是陣列除以或乘以某一個標量,會使得每一個陣列元素都乘以或除以該標量 

 

ndarray的排序:

快速排序,np.sort()與ndarray.sort()都可以,但有區別; np.sort()不改變輸入ndarray.sort()本地處理,不占用空間,但改變輸入

ndarray.sort(axis=-1,kind='quicksort',order=None)

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

axis:排序沿著陣列的方向,0表示按行,1表示按列;kind:排序的演算法,提供了快排、混排、堆排,'quicksort', 'mergesort', 'heapsort' --->  快速  歸并排序  堆排序;order:不是指的順序,以后用的時候再去分析這個,

部分排序,ndarray.partition()  ==  np.partition(a,k),有的時候我們不是對全部資料感興趣,我們可能只對最小或最大的一部分感興趣,當k為正時,我們想要得到最小的k個數;當k為負時,我們想要得到最大的k個數,

ndarr3 = np.random.randint(0,20,10)
ndarr3.sort() # 對原資料產生影響
ndarr3[::-1]  # 降序排列

# 部分排序
# 獲取最小的5個數
ndarr4 = np.random.randint(0,10000,100)
ndarr4.partition(5)
ndarr4[:5]
# 獲取最大的5個數
ndarr4.partition(-5)
ndarr4[::-1][:5]

 

檔案 I/O 創建陣列
CSV檔案:
#方法一:
保存檔案
np.savetxt('gb.csv',A)   #沒報錯就代表成功 A表示一個一維或者二維的陣列即可
讀取檔案
np.loadtxt('gb.csv')
?
#方法二:
使用 numpy.save  numpy.load 保存和讀取:
保存的是.npy型別的檔案
保存檔案
np.save('a.npy',A)
讀取檔案
np.load('a.npy')

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181825.html

標籤:Python

上一篇:Python爬蟲下載視頻檔案部分原始碼

下一篇:【2020Python修煉記7】Python語法入門—基本資料型別_數字型別(整型+浮點型)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more