通常,我的函数包含一个包含少量有效选项的字符串参数.例如,它可能表示类似于最后一个参数的模式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)'),但这个解决方案让我呕吐.
如何方便,优雅地显示字符串单元格的值?
可能重复:
从十进制中删除尾随零
如何获得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; 但是有更好的方法来写这个吗?
在Matlab中,当我想通过调试器运行一个函数时,我可以输入dbstop func,它将断点放在第一个代码行中func.m.然后,当我打电话时func(...),我可以一步一步地完成这个功能.
方法有没有等价物?如果我想调试一个交互式调用obj.meth(),这些替代方案都不起作用:
dbstep in 只有当要调试的代码是我正在调试的函数的一部分时才有效,而不是我是以交互方式调用它dbstop obj.mymeth,dbstop MyClass/mymeth或dbstop 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.
我编写了一个 python 脚本来投影和覆盖邓迪大学的对地静止卫星图像,因此生成的图像可用于 xplanet 渲染地球表面。该工具的源代码可以在https://github.com/jmozmoz/cloudmap/tree/cartopy找到(这是支持cartopy的分支)
该工具支持两个不同的 python 库将地球静止图像投影到平面地图上:pyresample 和 cartopy。
我发现以下差异/问题:
如果使用多处理库并行进行投影,则 cartopy 版本会崩溃并显示以下错误消息:
Fatal Python error: PyEval_RestoreThread: NULL tstate
Run Code Online (Sandbox Code Playgroud)那么为什么 cartopy 这么慢呢?Pyresample 是用 C 代码完成这项工作吗?cartopy 应该支持多处理吗?如何解决对比度问题?
感谢您的帮助
我正在尝试使用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 向我抛出一个语法错误,因为我尝试try不使用except:
try:\n spam()\nelse:\n eggs()\nfinally:\n semprini()\nRun Code Online (Sandbox Code Playgroud)\n\n相反,我被迫写下:
\n\ntry:\n spam()\nexcept:\n raise\nelse:\n eggs()\nfinally:\n semprini()\nRun 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:
为什么 的存在else:需要 的存在except:?
问题如何知道MATLAB中变量的大小解决了如何判断内存中变量的大小.但有没有办法根据数字类告诉大小?我正在寻找的是一个内置函数,它实现了一个简单的映射表:
double - > 8single - > 4int32 - > 4byte - > 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) 好的,我会尝试更具体.我想创建一个如下所示的时间轴:
_____________________
|___________________|
_____________________
|___________________|
* | / * *
| /
|/________
----------------------------------------------------->
time
Run Code Online (Sandbox Code Playgroud)
我想在这个时间表上堆积几样东西.基本上没有y轴,只是在底部运行的时间.我不知道怎么做这个,我似乎无法找到任何关于如何做的信息,所以我还没有尝试过任何东西.
python ×5
matlab ×3
matplotlib ×2
cartopy ×1
cell-array ×1
debugging ×1
decimal ×1
exception ×1
gdal ×1
oop ×1
pyresample ×1
syntax ×1
timeline ×1