由於之後要做數據分析的學習,所以這兩天開始在看關於array的一些教學,由於python沒有array的這項功能,或是可以說是list就是python的array.
所以在外掛nympy裡就提供了array的這項功能. 因為我matlab也是工作後才第一次碰,所以很多東西都用的不是很熟悉,碰到python後,以為他的矩陣概念是跟matlab一樣,直到看到三維時,導入圖片時發現rgb的排列方式跟我在matlab不同.由於之前看到的既定印象,又看到說matplotlib等很多概念都源自於matlab,所以又卡住了...還好看到youtube一篇老外在講解ㄇarray原理,用圖解方式每個pixel在三維矩陣的意義後才恍然大悟.
以下是我學習到的代源碼以及影片:
#以下兩個test都是在測試矩陣轉圖出來效果
# Test 1 :
a
=
np.array([
1
,
1
,
1
])
a.shape
b
=
np.array([
2
,
2
,
2
])
np.vstack((a,b))
a
=
np.array([
1
,
1
,
1
])[np.newaxis,:]
b
=
np.array([
2
,
2
,
2
])[newaxis,:]
np.concatenate((a,b),axis
=
0
)
np.hstack((a,b))
a[np.newaxis,:].shape
a[:,np.newaxis].shape
a
=
np.array([
1
,
1
,
1
])[:,np.newaxis]
b
=
np.array([
2
,
2
,
2
])[:,newaxis]
np.vstack((a,b))
np.concatenate((a,b),axis
=
0
)
# Test 2:
from
skimage
import
io
import
matplotlib
import
scipy
img
=
io.imread(
'stinkbug.png'
)
io.imshow(img)
img
img.shape
img[
0
].shape
plt.show()
a
=
np.arange(
12
).reshape((
3
,
4
))
b
=
np.array([[
255
,
155
,
255
],[
0
,
255
,
140
]])
plt.imshow(b, interpolation
=
'nearest'
,cmap
=
'Blues'
,origin
=
'upper'
)
plt.colorbar()
plt.show()
plt.colormaps()
RGB_Pic
=
np.array([ [[
100
,
0
,
0
],[
0
,
100
,
0
],[
0
,
0
,
100
]],[[
0
,
50
,
0
],[
50
,
0
,
0
],[
0
,
0
,
50
]] ])
plt.imshow(RGB_Pic,interpolation
=
'nearest'
)
xbar
=
np.arange(
0
,
3
,
1
)
plt.xticks(xbar)
plt.show()
t1
=
np.random.random(
3
)
t2
=
np.random.random(
3
)
t3
=
np.random.random(
3
)
t4
=
np.random.random(
3
)
t5
=
np.random.random(
3
)
t6
=
np.random.random(
3
)
t7
=
np.random.random(
3
)
t8
=
np.random.random(
3
)
t9
=
np.random.random(
3
)
Pic
=
np.array([ [t1,t2,t3],[t4,t5,t6],[t7,t8,t9] ])
plt.imshow(Pic,interpolation
=
'nearest'
)
xbar
=
np.arange(
0
,
3
,
1
)
plt.xticks(xbar)
plt.show()
#這邊主要是學習在圖片上劃入格線的方式,主要是用plt.xticks的方式在座標軸置入線
import
numpy as np
from
pylab
import
*
import
matplotlib.pyplot as plt
import
random
# Set grid line
major_ticks
=
np.arange(
0
,
101
,
20
)
minor_ticks
=
np.arange(
0
,
101
,
5
)
plt.xticks(major_ticks)
plt.xticks(minor_ticks)
plt.yticks(major_ticks)
plt.yticks(minor_ticks)
plt.grid(which
=
'both'
)
# or if you want differnet settings for the grids:
plt.grid(which
=
'minor'
, alpha
=
0.4
)
plt.grid(which
=
'major'
, alpha
=
0.4
)
# Set sin(x) plot
number
=
256
x
=
np.linspace(
-
np.pi,np.pi,number)
y
=
np.sin(x)
c1
=
np.random.random()
c2
=
np.random.random()
c3
=
np.random.random()
plt.plot(x,y,color
=
( c1, c2, c3 ), linewidth
=
2.0
, label
=
'sin(x)'
)
legend(loc
=
'upper left'
)
plt.xlabel(
'x'
, fontsize
=
10.0
)
plt.ylabel(
'y'
,fontsize
=
10.0
, rotation
=
0
)
justrange
=
np.arange(
-
4
,
5
,
1
)
justrange_y
=
np.arange(
-
2
,
3
,
1
)
plt.xticks(justrange)
plt.yticks(justrange_y)
plt.show()
出來效果:
以下是針對一維,二維,三維的圖解.
總之概念就是一維就是橫向增加,所以長方形是橫躺著往右延長(此時是一個中括號)
二維就是往下堆疊,一樣是一維的長方形做堆堆(此時是兩個中括號,裡面的是限制一維的長方形,外面的則是限制y方向的堆疊)
三維的話就是三個中括號,最裡面的是每個長方向像素的rgb值,中間的是限制長方向的像素,最外面是限制y方向的像素
如圖, 第一張圖,4就是一維的中括號裡面有四個值
第二張圖,3*4 就是二維的y方向堆疊三層,x方向堆疊四個
第三張圖,3*4*3,第一個3是y方向的三層堆疊,4是長方向有4個像素,第二個3則是說明每個像素的rgb三個訊號值. 所以第三張圖是3*4*3=36個像素
總之概念就是一維就是橫向增加,所以長方形是橫躺著往右延長(此時是一個中括號)
二維就是往下堆疊,一樣是一維的長方形做堆堆(此時是兩個中括號,裡面的是限制一維的長方形,外面的則是限制y方向的堆疊)
三維的話就是三個中括號,最裡面的是每個長方向像素的rgb值,中間的是限制長方向的像素,最外面是限制y方向的像素
如圖, 第一張圖,4就是一維的中括號裡面有四個值
第二張圖,3*4 就是二維的y方向堆疊三層,x方向堆疊四個
第三張圖,3*4*3,第一個3是y方向的三層堆疊,4是長方向有4個像素,第二個3則是說明每個像素的rgb三個訊號值. 所以第三張圖是3*4*3=36個像素
與matlab不樣的是matlab是一個矩陣分層多層代表不同維度,而python則是在一個矩陣裡直接放入rgb的資訊在裡面.這也就是我一開始卡住困惑的地方.
網址連結:
這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote |
0 意見:
張貼留言