【问题标题】:How do I convert this end indexing in MATLAB to Python如何将 MATLAB 中的末端索引转换为 Python
【发布时间】:2021-04-06 05:57:30
【问题描述】:

我想将 fspecial('motion', len, theta) 函数从 MATLAB 中的图像处理工具箱转换为 Python,但我被困在这一行上,无论我如何看待它对我来说都毫无意义.

h(end+(1:end)-1,end+(1:end)-1) = dist2line;

h 是一个二维数组,而 dist2line 也是一个二维数组。我所知道的是 matlab 中的 arr(end) 是 Python 中的 arr[-1] 但是索引中的 (1:end) 是如何工作的。

感谢任何帮助。非常感谢

【问题讨论】:

  • h(end) 也可以写成h(length(h))。有了这个技巧,我相信你可以自己解决。

标签: python arrays matlab


【解决方案1】:

如果h是一个二维数组,那么它的维度是size(h, 1) x size(h, 2),所以你基本上可以用相应的大小替换end,所以你会得到

s = size(h);
h(s(1)+(1:s(1))-1, s(2)+(1:s(2))-1) = dist2line;

请注意,当您有一个两个维度的索引向量时,您基本上可以提取h矩形子矩阵,这与python不同。

【讨论】:

  • 谢谢,但不幸的是,python 中的 (1:s[1]) 和 (1:s[2]) 仍然出现语法错误
  • 那么我的印象是,您的问题不仅在于 MATLAB,还在于 python 方面。在 MATLAB 中,a:b 可以被认为是在索引之外有意义的向量 - 在 python 中,冒号运算符仅在方括号内才有意义。因此,一旦您发现它就会失败。我建议在 python 中查找索引语法以及slice() 对象。另请注意,python 具有基于0 的索引,而 MATLAB 索引是基于1 的。如果您对此有任何疑问,请不要犹豫写一个新问题。但这超出了本文的范围。
猜你喜欢
  • 2021-11-16
  • 2020-12-26
  • 1970-01-01
  • 2019-05-11
  • 2015-08-20
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
相关资源
最近更新 更多