首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用ndimage.interpolation.affine_transform进行矩阵转换

利用ndimage.interpolation.affine_transform进行矩阵转换
EN

Stack Overflow用户
提问于 2018-10-03 16:40:50
回答 1查看 410关注 0票数 1

我试图用ndi.interpolation.affine_transform来转换一个简单的矩阵,但是我得到的结果是相反的。例如:

代码语言:javascript
复制
import scipy.ndimage as ndi
m = [[1, 1, 11], [2, 2, 22], [3, 3, 33]]
final_affine_matrix = [[1, 0], [0, 1]]
final_offset = [0, 1]
x = ndi.interpolation.affine_transform(
        m,
        final_affine_matrix,
        final_offset,
        order=1,
        mode='nearest',
        cval=0)
print(x)

[[ 1 11 11]
 [ 2 22 22]
 [ 3 33 33]]

如果偏移量是[0, 1],那么y轴不应该移动而不是x轴吗?也就是说,输出不应该是:

代码语言:javascript
复制
[[ 2  2 22]
 [ 3  3 33]
 [ 3  3 33]]

我可以实现这个结果,但只能使用偏移量[1, 0]。他们不是应该相反吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 17:21:42

正如文档中所述,scipy.ndimage.affine_transform()通过执行:np.dot(matrix, o) + offset (其中o是输出位置)计算新的位置。

这意味着下列测试应取得成功:

代码语言:javascript
复制
m = np.array(m)
assert(m[0, 1] == x[0, 0])
assert(m[0, 2] == x[0, 1])
assert(m[1, 1] == x[1, 0])
assert(m[1, 2] == x[1, 1])
assert(m[2, 1] == x[2, 0])
assert(m[2, 2] == x[2, 1])

或者,更简单地说:

代码语言:javascript
复制
assert(np.all(m[:, 1] == x[:, 0]))
assert(np.all(m[:, 2] == x[:, 1]))

就像预期的那样。因此,1-index确实在改变矩阵。也许,您期望另一个矩阵作为输出,因为您被打印的输出搞糊涂了。零索引表示行,第一个表示列。因此,按第一个索引移动将移动列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52631878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档