python - numpy中的重塑功能
问题描述
我正在尝试为图像分类目的重塑数据。我想将形状 (32,32,3) 转换为 (1,3,32,32)。我使用了两种方法进行整形,得到了不同的结果。第一个是 numpy reshape 方法。其他代码是我写的。
def res(t):
n = np.zeros((3,32,32))
for j in range(3):
for k in range(32):
for l in range(32):
n[j][k][l]=t[k][l][j]
n=n.reshape(1,3,32,32)
return n
我无法理解这两种方法之间的区别。
解决方案
这就是你想要做的np.reshape
之后transpose
-
new = original.transpose(2,0,1).reshape(1,3,32,32)
#(32,32,3)->(3,32,32)->(1,3,32,32)
##OR##
new = original.transpose(2,0,1)[None,...]
#(32,32,3)->(3,32,32)->(1,3,32,32)
完整的代码,比较你的函数和转置方法的结果。
t = np.random.random((32,32,3))
def res(t):
n = np.zeros((3,32,32))
for j in range(3):
for k in range(32):
for l in range(32):
n[j,k,l]=t[k,l,j] #<--- fixed indexing
n=n.reshape(1,3,32,32)
return n
## METHOD Transpose and Reshape
np.allclose(t.transpose(2,0,1).reshape(1,3,32,32), res(t))
#True
## METHOD Transpose and new axis
np.allclose(t.transpose(2,0,1)[None,...], res(t))
#True
推荐阅读
- javascript - 如何制作一个新按钮来启动嵌入式 Google 幻灯片演示?
- yocto - 添加依赖于 `OVERRIDES` 的层
- spidermonkey - 如何从源代码正确构建 SpiderMonkey
- java - 用于模拟 Java 的 LocalDate.fromEpochDay() 的 MySQL 函数
- xml - XSLT1.0:替换 XML 中属性出现的子环值
- node.js - JWT 功能在本地有效,但在 heroku 上无效
- elasticsearch - 弹性:没有可用于此声明的持久卷,也没有设置存储类
- python - 导入脚本并使用 APScheduler 和 Python 运行它
- android - 如何在颤动中使用 RepaintBoundary 将整个小部件变成图像
- android-workmanager - 单击按钮时,正在运行的工作管理器服务如何取消?