1. 程式人生 > >個人學習機器學習筆記--

個人學習機器學習筆記--

 

 

1.

X = X[y != 0, :2]

逗號是分割行與列,y != 0在行的位置,表示行不取y = 0 的所有行,而:2在列的位置,說明列取0到2的列(不包括2)

所以就是不取y=0的所有第0列與第1列

2.numpy.random.permutation()

返回一個改變的序列或 矩陣

 

np.random.permutation(10)
array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])

>>>

>>> np.random.permutation([1, 4, 9, 12, 15])
array([15,  1,  9,  4, 12])

>>>

>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.permutation(arr)
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]])

3.

這個函式的使用方法,在這裡已經有前輩講解過了,只是自己在測試的時候有一些思考,所以便寫了這篇部落格。下面是前輩文章的原話:

seed( ) 用於指定隨機數生成時所用演算法開始的整數值,如果使用相同的seed( )值,則每次生成的隨即數都相同,如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同。

編寫如下第一份程式碼:

from numpy import *
num=0
while(num<5):
    random.seed(5)
    print(random.random())
    num+=1
1
2
3
4
5
6
執行結果為:

0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
1
2
3
4
5
可以看到,每次執行的結果都是一樣的

修改程式碼,如下為第二份程式碼:

from numpy import *
num=0
random.seed(5)
while(num<5):
    print(random.random())
    num+=1
1
2
3
4
5
6
執行結果為:

0.22199317108973948
0.8707323061773764
0.20671915533942642
0.9186109079379216
0.48841118879482914
1
2
3
4
5

故對於該函式的使用,可總結為:

seed( ) 用於指定隨機數生成時所用演算法開始的整數值。 
1.如果使用相同的seed( )值,則每次生成的隨即數都相同; 
2.如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同。 
3.設定的seed()值僅一次有效

產生整數rand的原理是:

y=ax+b(mod   n)其中,n一般是一個很大的素數,幾萬。

a也是大素數。而且a,b,n都是常數。所以rand的產生決定於x,

他被稱為seed。

3.

numpy的ravel() 和 flatten()函式

簡介

首先宣告兩者所要實現的功能是一致的(將多維陣列降位一維)。這點從兩個單詞的意也可以看出來,ravel(散開,解開),flatten(變平)。兩者的區別在於返回拷貝(copy)還是返回檢視(view),numpy.flatten()返回一份拷貝,對拷貝所做的修改不會影響(reflects)原始矩陣,而numpy.ravel()返回的是檢視(view,也頗有幾分C/C++引用reference的意味),會影響(reflects)原始矩陣。

兩者功能

In [14]: x=np.array([[1,2],[3,4]])

# flattenh函式和ravel函式在降維時預設是行序優先
In [15]: x.flatten()
Out[15]: array([1, 2, 3, 4])

In [17]: x.ravel()
Out[17]: array([1, 2, 3, 4])

# 傳入'F'引數表示列序優先
In [18]: x.flatten('F')
Out[18]: array([1, 3, 2, 4])

In [19]: x.ravel('F')
Out[19]: array([1, 3, 2, 4])

#reshape函式當引數只有一個-1時表示將陣列降為一維
In [21]: x.reshape(-1)
Out[21]: array([1, 2, 3, 4])
#x.T表示x的轉置
In [22]: x.T.reshape(-1)
Out[22]: array([1, 3, 2, 4])
  •  
  • 區別
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
       [3, 4]])            
>>> x.ravel()[1] = 100
>>> x
array([[  1, 100],
       [  3,   4]])
  • faltten 是拷貝,不改變原陣列,而ravel是直接改變原陣列

4. np.c_與 np.r_的應用

 

例子
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.c_[a,b]

print(np.r_[a,b])
print(c)
print(np.c_[c,a])


np.r_是按列連線兩個矩陣,就是把兩矩陣上下相加,要求列數相等,類似於pandas中的concat()。
np.c_是按行連線兩個矩陣,就是把兩矩陣左右相加,要求行數相等,類似於pandas中的merge()。
結果:

[1 2 3 4 5 6]

[[1 4]
 [2 5]
 [3 6]]

[[1 4 1]
 [2 5 2]
 [3 6 3]]



在numpy中,一個列表雖然是橫著表示的,但它是列向量。(非常重要的話)
--------------------- 

5 .
 

numpy.sort

numpy.sort(aaxis=-1kind='quicksort'order=None)

引數:

a--需要排列的陣列

axis--排列參考的軸,預設是axis=-1(行排序),axis=1(行排序),axis=0(列排序),axis=none(放平後排序)

>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a)                # 行排序
array([[1, 4],
       [1, 3]])
>>> np.sort(a, axis=None)     # 放平後排序
array([1, 1, 3, 4])
>>> np.sort(a, axis=0)        # 列排序
array([[1, 1],
       [3, 4]])