python - 使用 ndimage.interpolation.affine_transform 进行矩阵转换
问题描述
我正在尝试使用 翻译一个简单的矩阵ndi.interpolation.affine_transform
,但我得到的结果是相反的。例如:
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 轴吗?也就是说,输出不应该是:
[[ 2 2 22]
[ 3 3 33]
[ 3 3 33]]
我可以达到这个结果,但只能使用 offset [1, 0]
。他们不应该反过来吗?
解决方案
如文档中所述,scipy.ndimage.affine_transform()
通过执行以下操作计算新位置:(输出位置np.dot(matrix, o) + offset
在哪里)。o
这意味着以下测试应该成功:
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])
或者,更简洁地说:
assert(np.all(m[:, 1] == x[:, 0]))
assert(np.all(m[:, 2] == x[:, 1]))
正如预期的那样,他们做到了。所以,确实矩阵正在被1
-index 移动。也许,您期望另一个矩阵作为输出,因为您对打印输出感到困惑。第零个索引表示行,第一个索引表示列。因此,按第一个索引移动将移动列。
推荐阅读
- python - 是否可以使用语法工具包导入另一种语言?
- javascript - 没有传递给 React 组件的道具
- sas - 如何在 SAS 中创建分层列结构
- html - 让 HTML 实体位于文本上方,同时保持正常的文档流
- regex - 如何修改日期格式的正则表达式?
- c# - 如何在 MassTransit 中使用 ConfigureConsumer 时将 Endpoint 绑定到 RoutingKey
- c# - 为什么 GetAsync 方法会抛出 'System.Collection.KeyNotFoundException' ?(v4)
- c# - EF 查询有时会给出来自不同模式的结果集
- sql - 如何获得最大列的行和第二高的值作为最后一列?
- python - Python简单线程锁情况