Python Numpy

NumPy Ndarray
NumPy(Numerical Python)
常用於數據分析的套件

ndarray
儲存數據的一種類型,效能較好


安裝:
#sudo apt-get install python-numpy

載入
# python
>>> import numpy as np


ps:
不要以 scientific notation for small numbers顯示ndarray
np.set_printoptions(suppress=True)
ex:
print ndarraydata1
[ 1.500e-10 1.500e+00 1.500e+03]
np.set_printoptions(suppress=True)
print ndarraydata1
[ 0. 1.5 1500. ]

…..

建立ndarray和產生資料 

建立空ndarray
ndarraydata1 = np.array([])
print ndarraydata1


產生ndarray資料
import numpy as np
listdata=[1,2,3,4,5]
ndarraydata1 = np.array(listdata)
print ndarraydata1

產生一組數字
.arange
ex:
>>> np.arange(5)
0 1 2 3 4

產生一組數字
.linspace
ex:
>>> np.linspace(2.0, 3.0, 5)
array([ 2. , 2.25, 2.5 , 2.75, 3. ])

0~1的亂數
.random.rand
ex:
>>>np.random.rand(3)
array([ 0.6590211, 0.97780188, 0.7183219 ])

-1~1的亂數
.random.randn
ex:
>>>np.random.randn(3)
array([ 0.6590211, -0.7780188, 0.7183219 ])
>>>np.random.randn(2, 3)
array([[ 0.3590211, -0.6780188, 0.2183219 ],
[ 0.4590211, -0.8780188, 0.1183219 ] ])

亂數
.random.randint
ex:
random.randint(3, size=10)
array([1, 0, 2, 0, 1, 1, 2, 0, 1, 0])


……

numpy 資料操作

排序
ex:
用第2個欄位排序
data = [ [5, 7, 3],
[4, 2, 2],
[0, 3, 5],
 ]
data = sorted(data, key=lambda x: x[1])
[[4, 2, 2],
[0, 3, 5],
[5, 7, 3]]

移除
ex:
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
index = [2, 3, 6]
new_a = np.delete(a, index)


取代
ex:
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
a[a>7]=10
a[a<3]=0
print a
[0, 0, 3, 4, 5, 6, 7, 10, 10]


將資料打亂
ex:
indices = np.random.permutation(data_train.shape[0])
data_train = data_train[indices]
target = target[indices]


……

合併ndarray

累積
np.append
ex:
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.append(a,10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9,10])

np.column_stack()
ex:
listdata=[1,2,3,4,5]
ndarraydata1 = np.array(listdata)
listdata=[1,0,0,1,1]
ndarraydata2 = np.array(listdata)
ndarraydata=np.column_stack((ndarraydata1,ndarraydata2))
print ndarraydata
array([[1, 1],
[2, 0],
[3, 0],
[4, 1],
[5, 1]])

np.row_stack()
ex:
ndarraydata=np.row_stack((ndarraydata1,ndarraydata2))
array([[1],
[2],
[3],
[4],
[5],
[1],
[0],
[0],
[0],
[1]])

 …

>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])

np.vstack
ex: 
>>> np.vstack((a,b))
array([[1, 2, 3],
[4, 5, 6]])

np.hstack
ex:
>>>np.hstack((a,b))
array([1, 2, 3, 4, 5, 6])

np.dstack
ex:
>>> np.dstack((a,b))
array([[[1, 4],
[2, 5],
[3, 6]]])


合併多個array
ex:
>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(np.ravel(x))
[1 2 3 4 5 6]

……………………………..

ndarray維度轉換

一維變2維
>>> a=[1 2 3 4 5 6]
>>> print a.reshape(6, 1)
[[1]
[2]
[3]
[4]
[5]
[6]]

ps:透過-1可讓Numpy自動計算數量
>>> print a.reshape((-1,1)) #這也等同(6,1)
[[1]
[2]
[3]
[4]
[5]
[6]]
>>> print a.reshape((1,-1)) #這也等同(1,6)
[[1 2 3 4 5 6]]


2維變1維
z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
z.shape (3, 4)
z.reshape(-1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])


比較兩個numpy array元素
for item in ndarraydata :
 if item[0]==item[1]:
  print ‘match’


……………….

讀檔和存檔

refer
http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html


numpy loadtxt
讀取文字檔
ex:
import numpy as np
data=np.loadtxt(‘file.txt’)

delimiter
指定來源檔分隔符號
default is any whitespace.
ex:
np.loadtxt(‘file.txt’, delimiter=’,’)

skiprows 略過行數
ex:
略過第1行
np.loadtxt(‘file.txt’, delimiter=’,’,skiprows=1)

dtype 指定資料類型
ex:
data=np.loadtxt(‘file.txt’,delimiter=’,’,dtype=[(‘f0’,str),(‘f1’,float),(‘f2’,float),(‘f3’,float)])
data=np.loadtxt(‘file.txt’,dtype=[(‘f0’,str),(‘f1’,float),(‘f2’,float),(‘f3’,float)])


資料集透過nploadtxt取得後,資料集可透過[列,欄]方法取得資料
ex:
取列
dataset[0]  表示僅取出第0列的資料
dataset[1:] 表示僅出第1列後的資料
dataset[-1:]  表示僅取出最後一列的資料
dataset[0:2]  表示僅取出第1列~第2列的資料
dataset[10:12]  表示僅取出第11列~第12列的資料
dataset[0:-1]  表示僅取出第1列~倒數第二列的資料
取欄
dataset[:,0] 表示僅取出第1欄的資料
dataset[:,1:] 表示取出第2欄(包含第2欄)後的資料
dataset[:,2:4] 表示取出第2欄到第3欄的資料


ps:
讀取外部數據
#vi dataset.txt
0 1 1 1
0 2 2 2
0 1 2 3
0 2 1 4
1 9 9 7
1 8 8 8
1 9 8 9
#python
>>>import numpy as np
>>>f = open(“dataset.txt”)
>>>dataset =a np.loadtxt(f)
>>>print(dataset)
[[ 0. 1. 1. 1.]
[ 0. 2. 2. 2.]
[ 0. 1. 2. 3.]
[ 0. 2. 1. 4.]
[ 1. 9. 9. 7.]
[ 1. 8. 8. 8.]
[ 1. 9. 8. 9.]]
>>>data = dataset[:, 1:]
>>>target = dataset[:, 0] # select column 0, the stock price
>>> print(data)
[[ 1. 1. 1.]
[ 2. 2. 2.]
[ 1. 2. 1.]
[ 2. 1. 2.]
[ 9. 9. 9.]
[ 8. 8. 8.]
[ 9. 8. 9.]]
>>> print(target)
[ 0. 0. 0. 0. 1. 1. 1.]


檢視資料欄列
dataset.shape

儲存文字檔
np.savetxt(‘test.out’, data_array, delimiter=’,’,fmt=’%10.5f’)