2017年2月6日 星期一

Python Array的二維與三維空間原理,以及畫圖補充

由於之後要做數據分析的學習,所以這兩天開始在看關於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個像素
與matlab不樣的是matlab是一個矩陣分層多層代表不同維度,而python則是在一個矩陣裡直接放入rgb的資訊在裡面.這也就是我一開始卡住困惑的地方. 


網址連結: 




這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote

0 意見:

張貼留言

Contact

Get in touch with me


Adress/Street

12 Street West Victoria 1234 Australia

Phone number

+(12) 3456 789

Website

www.johnsmith.com