python - 无法找出我的代码有什么问题?(使用 numpy 进行二维矩阵卷积)
问题描述
我刚刚从 Andrew Ng 的 deeplearning.ai coursera 课程中了解了矩阵卷积,我想尝试使用 numpy 制作我自己的 2D 矩阵卷积,但我不断收到以下错误。(代码底部)
我不明白我在第一次迭代中做错了什么,因为 f = 100 和 w = 0 所以我不明白为什么aSlice = dataColor[vertStart:vertEnd, vertStart:vertEnd]
是 100 x 99 矩阵。我尝试对“horiEnd”进行 +1,但它改为 100 x 101。我也试过assert(dataColor.shape == (1200,1200))
,但这似乎也不是问题。我认为问题在 for 循环之后开始。任何帮助将不胜感激。
def convSingleStep(aSlice, F = np.full((100,100), 0.000001)):
#F = f*f filter
s = aSlice*F
Z = np.sum(s)
return Z
def convForward(dataColor, F = np.full((100,100), 0.000001)):
nH, nW = dataColor.shape #1200 x 1200
f, f = F.shape #100 x 100
theNewSlice = np.zeros((nH, nW)) #1200 x 1200
for h in range(nH): #nH = 1200
vertStart = h
vertEnd = h + f
for w in range(nW): #nW = 1200
horiStart = w
horiEnd = w + f
aSlice = dataColor[vertStart:vertEnd, horiStart:horiEnd]
theNewSlice[h, w] = convSingleStep(aSlice, F = np.full((100,100), 0.000001))
return theNewSlice
```----> 3 s = aSlice*F
ValueError: operands could not be broadcast together with shapes (100,99) (100,100)```
解决方案
在循环的第一步中,
h = 0, , vertEnd = 100
w = 0, , horiEnd = 100
aSlice.shape = (100,100)
这一切都很好,并且按预期行事。
但是到了第 1,100 步 (11,101)
h = 1100, , vertEnd = 1200 # Note the index is 1200, which requires length of 1201
w = 0, , horiEnd = 100
现在您将形状设置在数据范围之外,使用vertEnd = 1200
:
aSlice = dataColor[vertStart:vertEnd, horiStart:horiEnd]
aSlice.shape # 99, 100
这里,
aSlice[0] = dataColor[1101:1200] = dataColor[1101:] = dataColor[1101:1200]
推荐阅读
- python - PyId_ 变量如何在 CPython 中解析?
- java - 我们如何使用 springreactor 比较两个通量值
- c++ - 在图表中更新 QLineSeries 根本不起作用
- java - Android Studio:在另一个类中获取 Dialog TextView 的 id?
- python - Getting a very low accuracy on implementing Neural Network in Keras
- ios - 带有毫秒组件的 Swift 日期格式
- r - 实现一个并行属性 vctrs 类
- snowflake-cloud-data-platform - 如何在雪花上获取暂存 csv 文件的标题名称?
- ios - iOS中的字体大小意外更改
- macos - SSH 工作,但无法 PING 和访问 Raspberry Pi 3B 的 VNC 查看器