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’)