寫了一個(gè)輸入和卷積核dim=2是一樣的(都是3)的卷積函數(shù),可以試試多加一個(gè)for循環(huán)變成三維卷積
創(chuàng)新互聯(lián)成立與2013年,我們提供高端網(wǎng)站建設(shè)、小程序制作、電商視覺(jué)設(shè)計(jì)、成都APP應(yīng)用開(kāi)發(fā)及網(wǎng)絡(luò)營(yíng)銷搜索優(yōu)化服務(wù),在傳統(tǒng)互聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)發(fā)展的背景下,我們堅(jiān)守著用標(biāo)準(zhǔn)的設(shè)計(jì)方案與技術(shù)開(kāi)發(fā)實(shí)力作基礎(chǔ),以企業(yè)及品牌的互聯(lián)網(wǎng)商業(yè)目標(biāo)為核心,為客戶打造具商業(yè)價(jià)值與用戶體驗(yàn)的互聯(lián)網(wǎng)+產(chǎn)品。
def conv3D(image, filter):
'''
三維卷積
:param image: 輸入,shape為 [h,w,c], c=3
:param filter: ?卷積核,shape為 [x,y,z], z=3
:return:
'''
h, w, c = image.shape
x, y, z = filter.shape
height_new = h - x + 1 ?# 輸出 h
width_new = w - y + 1 ?# 輸出 w
image_new = np.zeros((height_new, width_new), dtype=np.float)
for i in range(height_new):
for j in range(width_new):
r = np.sum(image[i:i+x, j:j+x, 0] * filter[:,:,0])
g = np.sum(image[i:i+y, j:j+y, 1] * filter[:,:,1])
b = np.sum(image[i:i+z, j:j+z, 2] * filter[:,:,2])
image_new[i, j] = np.sum([r,g,b])
image_new = image_new.clip(0, 255)
image_new = np.rint(image_new).astype('uint8')
return image_new
1、創(chuàng)建一般的多維數(shù)組
import?numpy?as?np
a?=?np.array([1,2,3],?dtype=int)??#?創(chuàng)建1*3維數(shù)組???array([1,2,3])
type(a)??#?numpy.ndarray類型
a.shape??#?維數(shù)信息(3L,)
a.dtype.name???#?'int32'
a.size???#?元素個(gè)數(shù):3
a.itemsize??#每個(gè)元素所占用的字節(jié)數(shù)目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)??#?創(chuàng)建2*3維數(shù)組??array([[1,2,3],[4,5,6]])
b.shape??#?維數(shù)信息(2L,3L)
b.size???#?元素個(gè)數(shù):6
b.itemsize???#?每個(gè)元素所占用的字節(jié)數(shù)目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')??#?創(chuàng)建2*3維數(shù)組??array([[1,2,3],[4,5,6]],dtype=int16)
c.shape??#?維數(shù)信息(2L,3L)
c.size???#?元素個(gè)數(shù):6
c.itemsize???#?每個(gè)元素所占用的字節(jié)數(shù)目:2
c.ndim??#?維數(shù)
d=np.array([[1,2,3],[4,5,6]],dtype=complex)????#??復(fù)數(shù)二維數(shù)組
d.itemsize??#?每個(gè)元素所占用的字節(jié)數(shù)目:16
d.dtype.name??#?元素類型:'complex128'
2、創(chuàng)建一般的多維數(shù)組
import?numpy?as?np
a?=?np.array([1,2,3],?dtype=int)??#?創(chuàng)建1*3維數(shù)組???array([1,2,3])
type(a)??#?numpy.ndarray類型
a.shape??#?維數(shù)信息(3L,)
a.dtype.name???#?'int32'
a.size???#?元素個(gè)數(shù):3
a.itemsize??#每個(gè)元素所占用的字節(jié)數(shù)目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)??#?創(chuàng)建2*3維數(shù)組??array([[1,2,3],[4,5,6]])
b.shape??#?維數(shù)信息(2L,3L)
b.size???#?元素個(gè)數(shù):6
b.itemsize???#?每個(gè)元素所占用的字節(jié)數(shù)目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')??#?創(chuàng)建2*3維數(shù)組??array([[1,2,3],[4,5,6]],dtype=int16)
c.shape??#?維數(shù)信息(2L,3L)
c.size???#?元素個(gè)數(shù):6
c.itemsize???#?每個(gè)元素所占用的字節(jié)數(shù)目:2
c.ndim??#?維數(shù)
d=np.array([[1,2,3],[4,5,6]],dtype=complex)????#??復(fù)數(shù)二維數(shù)組
d.itemsize??#?每個(gè)元素所占用的字節(jié)數(shù)目:16
d.dtype.name??#?元素類型:'complex128'
3、創(chuàng)建特殊類型的多維數(shù)組
a1?=?np.zeros((3,4))????#?創(chuàng)建3*4全零二維數(shù)組
輸出:
array([[?0.,??0.,??0.,??0.],
[?0.,??0.,??0.,??0.],
[?0.,??0.,??0.,??0.]])
a1.dtype.name???#?元素類型:'float64'
a1.size??#?元素個(gè)數(shù):12
a1.itemsize??#?每個(gè)元素所占用的字節(jié)個(gè)數(shù):8
a2?=?np.ones((2,3,4),?dtype=np.int16)??#?創(chuàng)建2*3*4全1三維數(shù)組
a2?=?np.ones((2,3,4),?dtype='int16')?????#?創(chuàng)建2*3*4全1三維數(shù)組
輸出:
array([[[1,?1,?1,?1],
[1,?1,?1,?1],
[1,?1,?1,?1]],
[[1,?1,?1,?1],
[1,?1,?1,?1],
[1,?1,?1,?1]]],?dtype=int16)
a3?=?np.empty((2,3))??#?創(chuàng)建2*3的未初始化二維數(shù)組
輸出:(may?vary)
array([[?1.,??2.,??3.],
[?4.,??5.,??6.]])
a4?=?np.arange(10,30,5)???#?初始值10,結(jié)束值:30(不包含),步長(zhǎng):5
輸出:array([10,?15,?20,?25])
a5?=?np.arange(0,2,0.3)????#?初始值0,結(jié)束值:2(不包含),步長(zhǎng):0.2
輸出:array([?0.?,??0.3,??0.6,??0.9,??1.2,??1.5,??1.8])
from?numpy?import?pi
np.linspace(0,?2,?9)???#?初始值0,結(jié)束值:2(包含),元素個(gè)數(shù):9
輸出:
array([?0.??,??0.25,??0.5?,??0.75,??1.??,??1.25,??1.5?,??1.75,??2.??])
x?=?np.linspace(0,?2*pi,?9)
輸出:
array([?0.????????,??0.78539816,??1.57079633,??2.35619449,??3.14159265,
3.92699082,??4.71238898,??5.49778714,??6.28318531])
a?=?np.arange(6)
輸出:
array([0,?1,?2,?3,?4,?5])
b?=?np.arange(12).reshape(4,3)
輸出:
array([[?0,??1,??2],
[?3,??4,??5],
[?6,??7,??8],
[?9,?10,?11]])
c?=?np.arange(24).reshape(2,3,4)
輸出:
array([[[?0,??1,??2,??3],
[?4,??5,??6,??7],
[?8,??9,?10,?11]],
[[12,?13,?14,?15],
[16,?17,?18,?19],
[20,?21,?22,?23]]])
使用numpy.set_printoptions可以設(shè)置numpy變量的打印格式
在ipython環(huán)境下,使用help(numpy.set_printoptions)查詢使用幫助和示例
4、多維數(shù)組的基本操作
加法和減法操作要求操作雙方的維數(shù)信息一致,均為M*N為數(shù)組方可正確執(zhí)行操作。
a?=?np.arange(4)
輸出:
array([0,?1,?2,?3])
b?=?a**2
輸出:
array([0,?1,?4,?9])
c?=?10*np.sin(a)
輸出:
array([?0.????????,??8.41470985,??9.09297427,??1.41120008])
n??35
輸出:
array([?True,??True,??True,??True],?dtype=bool)
A?=?np.array([[1,1],[0,1]])
B?=?np.array([[2,0],[3,4]])
C?=?A?*?B????#?元素點(diǎn)乘
輸出:
array([[2,?0],
[0,?4]])
D?=?A.dot(B)???#?矩陣乘法
輸出:
array([[5,?4],
[3,?4]])
E?=?np.dot(A,B)???#?矩陣乘法
輸出:
array([[5,?4],
[3,?4]])
多維數(shù)組操作過(guò)程中的類型轉(zhuǎn)換
When operating with arrays of different types, the type of the
resulting array corresponds to the more general or precise one (a
behavior known as upcasting)
即操作不同類型的多維數(shù)組時(shí),結(jié)果自動(dòng)轉(zhuǎn)換為精度更高類型的數(shù)組,即upcasting
數(shù)組索引、切片和迭代
a?=?np.ones((2,3),dtype=int)??????#?int32
b?=?np.random.random((2,3))?????#?float64
b?+=?a??#?正確?
a?+=?b??#?錯(cuò)誤
a?=?np.ones(3,dtype=np.int32)
b?=?np.linspace(0,pi,3)
c?=?a?+?b
d?=?np.exp(c*1j)
輸出:
array([?0.54030231+0.84147098j,?-0.84147098+0.54030231j,
-0.54030231-0.84147098j])
d.dtype.name
輸出:
'complex128'
多維數(shù)組的一元操作,如求和、求最小值、最大值等
a?=?np.random.random((2,3))
a.sum()
a.min()
a.max()
b?=?np.arange(12).reshape(3,4)
輸出:
array([[?0,??1,??2,??3],
[?4,??5,??6,??7],
[?8,??9,?10,?11]])
b.sum(axis=0)????#?按列求和
輸出:
array([12,?15,?18,?21])
b.sum(axis=1)????#?按行求和
輸出:
array([?6,?22,?38])
b.cumsum(axis=0)???#?按列進(jìn)行元素累加
輸出:
array([[?0,??1,??2,??3],
[?4,??6,??8,?10],
[12,?15,?18,?21]])
b.cumsum(axis=1)???#?按行進(jìn)行元素累加
輸出:
array([[?0,??1,??3,??6],
[?4,??9,?15,?22],
[?8,?17,?27,?38]])
universal functions
B?=?np.arange(3)
np.exp(B)
np.sqrt(B)
C?=?np.array([2.,-1.,4.])
np.add(B,C)
其他的ufunc函數(shù)包括:
all,?any,?apply_along_axis,?argmax,?argmin,?argsort,?average,?bincount,?ceil,?clip,?conj,?corrcoef,?cov,?cross,?cumprod,?cumsum,?diff,?dot,?floor,inner,?lexsort,?max,?maximum,?mean,?median,?min,?minimum,?nonzero,?outer,?prod,?re,?round,?sort,?std,?sum,?trace,?transpose,?var,vdot,?vectorize,?where
5. 數(shù)組索引、切片和迭代
a?=?np.arange(10)**3
a[2]
a[2:5]
a[::-1]?#?逆序輸出
for?i?in?a:
print?(i**(1/3.))
def?f(x,y):
return?10*x+y
b?=?np.fromfunction(f,(5,4),dtype=int)
b[2,3]
b[0:5,1]
b[:,1]
b[1:3,:]
b[-1]
c?=?np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])
輸出:
array([[[??0,???1,???2],
[?10,??11,??12]],
[[100,?101,?102],
[110,?111,?112]]])
c.shape
輸出:
(2L,?2L,?3L)
c[0,...]
c[0,:,:]
輸出:
array([[?0,??1,??2],
[10,?11,?12]])
c[:,:,2]
c[...,2]
輸出:
array([[??2,??12],
[102,?112]])
for?row?in?c:
print(row)
for?element?in?c.flat:
print(element)
a?=?np.floor(10*np.random.random((3,4)))
輸出:
array([[?3.,??9.,??8.,??4.],
[?2.,??1.,??4.,??6.],
[?0.,??6.,??0.,??2.]])
a.ravel()
輸出:
array([?3.,??9.,??8.,?...,??6.,??0.,??2.])
a.reshape(6,2)
輸出:
array([[?3.,??9.],
[?8.,??4.],
[?2.,??1.],
[?4.,??6.],
[?0.,??6.],
[?0.,??2.]])
a.T
輸出:
array([[?3.,??2.,??0.],
[?9.,??1.,??6.],
[?8.,??4.,??0.],
[?4.,??6.,??2.]])
a.T.shape
輸出:
(4L,?3L)
a.resize((2,6))
輸出:
array([[?3.,??9.,??8.,??4.,??2.,??1.],
[?4.,??6.,??0.,??6.,??0.,??2.]])
a.shape
輸出:
(2L,?6L)
a.reshape(3,-1)
輸出:
array([[?3.,??9.,??8.,??4.],
[?2.,??1.,??4.,??6.],
[?0.,??6.,??0.,??2.]])
詳查以下函數(shù):
ndarray.shape,?reshape,?resize,?ravel
6. 組合不同的多維數(shù)組
a?=?np.floor(10*np.random.random((2,2)))
輸出:
array([[?5.,??2.],
[?6.,??2.]])
b?=?np.floor(10*np.random.random((2,2)))
輸出:
array([[?0.,??2.],
[?4.,??1.]])
np.vstack((a,b))
輸出:
array([[?5.,??2.],
[?6.,??2.],
[?0.,??2.],
[?4.,??1.]])
np.hstack((a,b))
輸出:
array([[?5.,??2.,??0.,??2.],
[?6.,??2.,??4.,??1.]])
from?numpy?import?newaxis
np.column_stack((a,b))
輸出:
array([[?5.,??2.,??0.,??2.],
[?6.,??2.,??4.,??1.]])
a?=?np.array([4.,2.])
b?=?np.array([2.,8.])
a[:,newaxis]
輸出:
array([[?4.],
[?2.]])
b[:,newaxis]
輸出:
array([[?2.],
[?8.]])
np.column_stack((a[:,newaxis],b[:,newaxis]))
輸出:
array([[?4.,??2.],
[?2.,??8.]])
np.vstack((a[:,newaxis],b[:,newaxis]))
輸出:
array([[?4.],
[?2.],
[?2.],
[?8.]])
np.r_[1:4,0,4]
輸出:
array([1,?2,?3,?0,?4])
np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]
輸出:
array([[1,?2,?3,?0,?0,?0,?4,?5,?6]])
詳細(xì)使用請(qǐng)查詢以下函數(shù):
hstack,?vstack,?column_stack,?concatenate,?c_,?r_
7. 將較大的多維數(shù)組分割成較小的多維數(shù)組
a?=?np.floor(10*np.random.random((2,12)))
輸出:
array([[?9.,??7.,??9.,?...,??3.,??2.,??4.],
[?5.,??3.,??3.,?...,??9.,??7.,??7.]])
np.hsplit(a,3)
輸出:
[array([[?9.,??7.,??9.,??6.],
[?5.,??3.,??3.,??1.]]),?array([[?7.,??2.,??1.,??6.],
[?7.,??5.,??0.,??2.]]),?array([[?9.,??3.,??2.,??4.],
[?3.,??9.,??7.,??7.]])]
np.hsplit(a,(3,4))
輸出:
[array([[?9.,??7.,??9.],
[?5.,??3.,??3.]]),?array([[?6.],
[?1.]]),?array([[?7.,??2.,??1.,?...,??3.,??2.,??4.],
[?7.,??5.,??0.,?...,??9.,??7.,??7.]])]
實(shí)現(xiàn)類似功能的函數(shù)包括:
hsplit,vsplit,array_split
8. ?多維數(shù)組的復(fù)制操作
a?=?np.arange(12)
輸出:
array([?0,??1,??2,?...,??9,?10,?11])
not?copy?at?all
b?=?a
b?is?a????#?True
b.shape?=?3,4
a.shape??#?(3L,4L)
def?f(x)???#?Python?passes?mutable?objects?as?references,?so?function?calls?make?no?copy.
print(id(x))???#?id是python對(duì)象的唯一標(biāo)識(shí)符
id(a)???#?111833936L
id(b)???#?111833936L
f(a)?????#?111833936L
淺復(fù)制
c?=?a.view()
c?is?a???#?False
c.base?is?a???#?True
c.flags.owndata????#?False
c.shape?=?2,6
a.shape???#?(3L,4L)
c[0,4]?=?1234
print(a)
輸出:
array([[???0,????1,????2,????3],
[1234,????5,????6,????7],
[???8,????9,???10,???11]])
s?=?a[:,1:3]
s[:]?=?10
print(a)
輸出:
array([[???0,???10,???10,????3],
[1234,???10,???10,????7],
[???8,???10,???10,???11]])
深復(fù)制
d?=?a.copy()
d?is?a???#?False
d.base?is?a???#?False
d[0,0]?=?9999
print(a)
輸出:
array([[???0,???10,???10,????3],
[1234,???10,???10,????7],
[???8,???10,???10,???11]])
numpy基本函數(shù)和方法一覽
Array ? Creation
arange,?array,?copy,?empty,?empty_like,?eye,?fromfile,?fromfunction,?identity,?linspace,?logspace,?mgrid,?ogrid,?ones,?ones_like,?r,?zeros,zeros_like
Conversions
ndarray.astype,?atleast_1d,?atleast_2d,?atleast_3d,?mat
Manipulations
array_split,?column_stack,?concatenate,?diagonal,?dsplit,?dstack,?hsplit,?hstack,?ndarray.item,?newaxis,?ravel,?repeat,?reshape,?resize,squeeze,?swapaxes,?take,?transpose,?vsplit,?vstack
Questionsall,?any,?nonzero,?where
Ordering
argmax,?argmin,?argsort,?max,?min,?ptp,?searchsorted,?sort
Operations
choose,?compress,?cumprod,?cumsum,?inner,?ndarray.fill,?imag,?prod,?put,?putmask,?real,?sum
Basic Statistics
cov,?mean,?std,?var
Basic Linear Algebra
cross,?dot,?outer,?linalg.svd,?vdot
完整的函數(shù)和方法一覽表鏈接:
raw_input獲取的輸入是字符串,不能直接用np.array,需要用split進(jìn)行切分,然后強(qiáng)制轉(zhuǎn)化成數(shù)值類型,才能用plot函數(shù)
我把你的代碼稍微修改了一下,可能不太漂亮,不過(guò)能運(yùn)行了
x=[1,2,3]
a
=
raw_input('function')
a
=
a.split('
')#依空格對(duì)字符串a(chǎn)進(jìn)行切分,如果是用逗號(hào)分隔,則改成a.split(',')
b
=
[]
for
i
in
range(len(a)):#把切分好的字符強(qiáng)制轉(zhuǎn)化成int類型,如果是小數(shù),將int改為float
b.append(int(a[i]))
plt.plot(x,
b,
label='x',
color="green",
linewidth=1)