小编ger*_*rit的帖子

以方便,优雅和健壮的方式显示字符串的单元格数组

通常,我的函数包含一个包含少量有效选项的字符串参数.例如,它可能表示类似于最后一个参数的模式interp1.当用户传递的值不正确时,我想在错误消息中提供有效选项列表.

目前,我这样解决:

function out = my_func(mode)
valid_modes = {'rectangular', 'gaussian'};
switch mode
    case 'rectangular'
        % do something
    case 'gaussian'
        % do something else
    otherwise
        error(['atmlab:' mfilename ':invalid'], 'Invalid mode: %s. Valid modes: %s', mode, sprintf('%s ', valid_modes))
end
Run Code Online (Sandbox Code Playgroud)

我正在利用的技巧是sprintf可以采用单元格数组,然后输出多个字符串的串联.但是,这种行为似乎没有记录,从Matlab 2012b开始,Matlabs Code Analyzer已经开始警告这种用法sprintf.它仍然可以工作,但它可能不是一种受支持的方式,我不知道它将来是否会继续工作,所以我不愿意简单地忽略或取消警告.

另一个解决方案是使用evalc('disp(valid_modes)'),但这个解决方案让我呕吐.

如何方便,优雅地显示字符串单元格的值?

matlab cell-array

3
推荐指数
1
解决办法
6875
查看次数

最短的相同十进制表示

可能重复:
从十进制中删除尾随零

如何获得Decimal比较平等的最短表示?

例如:

  • Decimal('89.00') - > '89'
  • Decimal('123.010') - > '123.01'
  • Decimal('0.0') - > '0'

目前,我有自己的实现,首先转换为字符串,用

if chanstr.endswith('0'):
    chanstr = chanstr[:chanstr.rfind('.')]
Run Code Online (Sandbox Code Playgroud)

工作正常,只有2 LOC; 但是有更好的方法来写这个吗?

python decimal

3
推荐指数
1
解决办法
120
查看次数

如何以编程方式在方法的开头放置断点?

在Matlab中,当我想通过调试器运行一个函数时,我可以输入dbstop func,它将断点放在第一个代码行中func.m.然后,当我打电话时func(...),我可以一步一步地完成这个功能.

方法有没有等价物?如果我想调试一个交互式调用obj.meth(),这些替代方案都不起作用:

  • dbstep in 只有当要调试的代码是我正在调试的函数的一部分时才有效,而不是我是以交互方式调用它
  • dbstop obj.mymeth,dbstop MyClass/mymethdbstop MyClass.mymeth失败Cannot find function MyClass.mymeth.
  • 所以,也许它被视为一个子功能.然而,dbstop in MyClass at mymeth失败了Cannot find function "mymeth" within "MyClass".这个实际上让我感到惊讶.请注意,即使它可以工作,我仍然需要首先找出定义类.
  • dbstop mymeth实际上确实设置了一个断点,但是它将它设置在第1行MyClass,而不是在第1行MyClass.mymeth.我没有测试mymeth过载会发生什么.
  • 接下来,我尝试通过元类和元方法:ms = ?MyClass; meth = ms.MethodList(strcmp({ms.MethodList.Name}, 'mymeth')) ,给我一个meta.method对象我的方法.但是,dbstop想要一个字符串,所以我不能放一个断点.虽然meta.method告诉我定义类,但它并没有告诉我定义方法的行号,所以我也不能设置这样的断点.

然后,剩下的就是从中确定定义类meta.method,在图形交互编辑器中打开相应的文件,搜索定义方法的行,并手动放置断点.这非常耗时,只有在使用图形时才有效.

有没有办法进入交互式调用的方法,或以编程方式在方法的开头设置断点?我正在使用2013a.

oop debugging matlab

3
推荐指数
1
解决办法
496
查看次数

使用 cartopy 和 Pyresample 投影卫星图像的差异

我编写了一个 python 脚本来投影和覆盖邓迪大学的对地静止卫星图像,因此生成的图像可用于 xplanet 渲染地球表面。该工具的源代码可以在https://github.com/jmozmoz/cloudmap/tree/cartopy找到(这是支持cartopy的分支)

该工具支持两个不同的 python 库将地球静止图像投影到平面地图上:pyresample 和 cartopy。

我发现以下差异/问题:

  1. pyresample 比 cartopy 快得多(取决于输出图像的大小,最多可达 10 倍)
  2. 输出图像不同:使用pyresample 的结果显示出更强的对比度。有关示例,请参阅调试目录https://github.com/jmozmoz/cloudmap/tree/cartopy/debug
  3. 如果使用多处理库并行进行投影,则 cartopy 版本会崩溃并显示以下错误消息:

    Fatal Python error: PyEval_RestoreThread: NULL tstate
    
    Run Code Online (Sandbox Code Playgroud)

那么为什么 cartopy 这么慢呢?Pyresample 是用 C 代码完成这项工作吗?cartopy 应该支持多处理吗?如何解决对比度问题?

感谢您的帮助

python matplotlib cartopy pyresample

3
推荐指数
1
解决办法
1335
查看次数

Python gdal未定义符号GDALRasterBandGetVirtualMem

我正在尝试使用Python GDAL绑定.当通过pip天真地安装绑定时,安装失败并出现错误:'VSIFTruncateL'未在此范围内声明,可能是由于安装的标头和python绑定版本不匹配.该建议的解决方案在别处是通过PIP安装版本完全相同.但是,我的系统有gdal-1.7.3,并且没有1.7.3绑定.安装1.7.1绑定会导致编译成功,但尝试运行导致undefined symbol: GDALRasterBandGetVirtualMem.因此,我从源代码安装了1.11.1并编译了最新的绑定.编译和安装似乎有效,但导入不会:

In [2]: import osgeo
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-2-26b16a6d02ad> in <module>()
----> 1 import osgeo

/export/data/home/gholl/venv/gerrit/lib/python3.4/site-packages/osgeo/__init__.py in <module>()
     19                 fp.close()
     20             return _mod
---> 21     _gdal = swig_import_helper()
     22     del swig_import_helper
     23 else:

/export/data/home/gholl/venv/gerrit/lib/python3.4/site-packages/osgeo/__init__.py in swig_import_helper()
     15         if fp is not None:
     16             try:
---> 17                 _mod = imp.load_module('_gdal', fp, pathname, description)
     18             finally:
     19                 fp.close()

/export/data/home/gholl/venv/gerrit/lib64/python3.4/imp.py in load_module(name, …
Run Code Online (Sandbox Code Playgroud)

python gdal

3
推荐指数
1
解决办法
2539
查看次数

为什么try-finally有效,而try-else-finally无效?

我发现 Python 向我抛出一个语法错误,因为我尝试try不使用except

\n\n
try:\n    spam()\nelse:\n    eggs()\nfinally:\n    semprini()\n
Run Code Online (Sandbox Code Playgroud)\n\n

相反,我被迫写下:

\n\n
try:\n    spam()\nexcept:\n    raise\nelse:\n    eggs()\nfinally:\n    semprini()\n
Run Code Online (Sandbox Code Playgroud)\n\n

这感觉有点傻,但我想在 \xe2\x80\x94之前eggs()执行,如果我将 -clause 的内容放在-clause之后,它将在 后执行。尽管过去曾有过withoutproposal ,但语义有所不同,因为那里的含义是 ,即我所追求的截然相反。有趣的是,没有or是有效的,但如果我没有也没有,我就不能拥有。尽管可能有不同的方式来表达相同的内容,但我想到的替代方案(可能)具有细微不同的行为。 semprini()else:finally: semprini()tryexceptexcept: passtry:except: else: else:except:

\n\n

为什么 的存在else:需要 的存在except:

\n

python syntax exception

3
推荐指数
1
解决办法
863
查看次数

数字类的大小

问题如何知道MATLAB中变量的大小解决了如何判断内存中变量的大小.但有没有办法根据数字类告诉大小?我正在寻找的是一个内置函数,它实现了一个简单的映射表:

  • double - > 8
  • single - > 4
  • int32 - > 4
  • byte - > 1

...等等.有没有计算这个的功能,还是我需要自己实现一个小表?

请注意,whos不是我要找的.虽然whos显示了现有对象的内存使用情况,但我想估计我还没有的数据的内存使用情况.

numpy,我可以使用以下itemsize属性实现此目的dtype:

In [6]: dt = dtype([("A", float32, (5,))])

In [7]: M = empty(5, dtype=dt)

In [8]: M.dtype.itemsize
Out[8]: 20
Run Code Online (Sandbox Code Playgroud)

matlab

1
推荐指数
1
解决办法
1471
查看次数

有没有办法在python上制作时间轴?

好的,我会尝试更具体.我想创建一个如下所示的时间轴:

                    _____________________
                    |___________________|
_____________________
|___________________|

*       |  /         *       *
        | /
        |/________  

----------------------------------------------------->
                       time
Run Code Online (Sandbox Code Playgroud)

我想在这个时间表上堆积几样东西.基本上没有y轴,只是在底部运行的时间.我不知道怎么做这个,我似乎无法找到任何关于如何做的信息,所以我还没有尝试过任何东西.

python timeline matplotlib

-4
推荐指数
1
解决办法
1万
查看次数