個人學習機器學習筆記--
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
(a, axis=-1, kind='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]])