对于当前项目,我必须使用并对基质中提供的信息进行数学化,以及使用ITK/VTK功能来显示医疗信息/渲染.基本上我必须以(我猜)50/50的方式使用matlab例程和VTK/ITK.问题是,由于我必须使用两者,我想提前决定使用哪种方法:
将ITK和VTK库导入matlab: 为此,您必须构建自己的VTK作为开始.然后,通过这个例子,整个想法是在.mex文件中编写VTK代码.这些文件可以在其中编写c代码作为matlab的函数.
在ITK/VTK环境中导入matlab函数:为此,我将使用一种语言(可能是python)来进行矩阵计算.我可以利用Numpy.这是一个用于Python的matlab类计算模块,它将vtk数据转换为numpy数据,我可以利用matplotlib制作绘图.
优点/缺点ITK/VTK在MATLAB导入
+容易做MATLAB计算和绘图
+ MATLAB是最强大的工具之一与矩阵的工作
之前有+用MATLAB(主观)
-必须安装有MATLAB
-运行MATLAB负担你的电脑
在ITK/VTK环境中导入的优缺点matlab
+无需安装matlab
+减少PC的应变,并且由于医疗数据集需要很多来自你的电脑,这很好.
在这种情况下已经设置了+ ITK/VTK环境(目前使用这种方式,但从未使用matlab/matrices .mat)
- 听说过以这种方式很难进行matlab计算的故事.有点凌乱.
- 较少的python经验(与matlab 0结合使用)
所以...?总结
实际上,我正在寻找那些在两种环境中工作的人,但是因为我认为有这么几种,我喜欢听到建议在做出最终选择之前要寻找什么.它需要花费大量时间才能以我需要的方式工作,因此尝试两者都是浪费时间(也有截止日期).
额外的注意事项
- 我已经尝试使用Simulink for matlab和VTK/ITK库,但我不喜欢它.
- 虽然问题的解决方案当然是我能够到达的最佳方式,但我也很高兴有经验的人做出与此基本相同的选择.做出这样的选择时需要关注的关键点是什么?我错过了我的优缺点关键点吗?
我在指定的行中从以下Python3代码中收到错误.x,y和z都是简单的2D numpy数组相同但尺寸相同,应该相同.然而他们的行为不同,y和z崩溃,而x工作正常.
import numpy as np
from PIL import Image
a = np.ones( ( 3,3,3), dtype='uint8' )
x = a[1,:,:]
y = a[:,1,:]
z = a[:,:,1]
imx = Image.fromarray(x) # ok
imy = Image.fromarray(y) # error
imz = Image.fromarray(z) # error
Run Code Online (Sandbox Code Playgroud)
但这很有效
z1 = 1*z
imz = Image.fromarray(z1) # ok
Run Code Online (Sandbox Code Playgroud)
错误是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python3\lib\site-packages\PIL\Image.py", line 1918, in fromarray
obj = obj.tobytes()
AttributeError: 'numpy.ndarray' object has no attribute 'tobytes'
Run Code Online (Sandbox Code Playgroud)
那么x,y,z,z1之间有什么不同?我什么都不知道.
>>> …Run Code Online (Sandbox Code Playgroud) 我正在使用 h5py 修复 python 脚本。它包含这样的代码:
hdf = h5py.File(hdf5_filename, 'a')
...
g = hdf.create_group('foo')
g.create_dataset('bar', ...whatever...)
Run Code Online (Sandbox Code Playgroud)
有时这会在已经有一个名为“foo”的组的文件上运行,在这种情况下,我会看到“ValueError: Unable to create group (Name already exists)”
解决此问题的一种方法是用四行替换带有 create_group 的简单行,如下所示:
if 'foo' in hdf.keys():
g = hdf['foo']
else:
g = hdf.create_group['foo']
g.create_dataset(...etc...)
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来做到这一点,也许只有一行?就像标准 C 库中的文件一样,'a' 模式要么附加到现有文件,要么创建一个文件(如果它不存在)。
数据集也是如此 - 我有
create_dataset('bar', ...)
Run Code Online (Sandbox Code Playgroud)
但应该先检查:
if 'bar' in g.keys():
d = g['bar']
else:
d = g.create_dataset('bar')
Run Code Online (Sandbox Code Playgroud)
我的愿望:找到 h5py 有名为 create_or_use_group() 和 create_or_use_dataset() 的方法。什么是实际存在的?
我已经进行了搜索,但是我找不到最近杂乱绑定的正确在线教程.有大约0.4和0.6的指南,但0.8应该是非常不同的,使这些指南有点无用.链接或示例非常感谢!
我正在调试一个包含数百个类,杂乱代码等的巨大Qt应用程序.在追踪错误的同时,我希望单步执行gdb(kdbg,ddd,无论如何),同时观察使用QPainter绘制到QImage中的内容这是从方法到方法的结果.在某个地方,它正在被给予不良信息.通常我只能将最终的QImage写入.png文件.
有什么方法可以在调试器中停止时查看QImage中的图像是什么?
顺便说一句,这是使用Qt4.3,这有点旧,但我们现在仍然坚持.如果一个较新的Qt提供了一些优势,我有办法破解它(以及其他人看到这个问题可能有最新的).
在一个交互式的Python会话中,我有时会做一些愚蠢的事情
plot.ylimits = (0,100)
Run Code Online (Sandbox Code Playgroud)
plot是某个Plot类的实例,ylimits是它的一个方法.我本应该用这个:
plot.ylimits(0,100)
Run Code Online (Sandbox Code Playgroud)
Python工作的方式,绘图对象现在有一个名为ylimits的新成员,它将一个元组作为其值,而方法,最初由Plot类提供的可执行子程序,曾经用ylimits(...)调用的是不见了.也许在我脑海中的某个地方,我认为ylimits是一个属性,并且分配给它会调用一些隐藏的setter方法,就像在其他一些语言中所做的那样.
我怎样才能找回那种方法?如何修复我的绘图对象,同时保持在交互式会话中我还有许多其他变量,函数等?
我发现重装(theplotmodule)不起作用.我破坏了Plot的一个特定实例; 刷新Plot类的定义和其他东西没有帮助.
我正在使用Python 2.7
我正在使用Gadfly在Julia中绘制数据.我有x =一个浮点数组,以及几个匹配长度的y1,y2,y3 ...... 如何在一个Gadfly图中以绿色,(x,y2)以红色等绘制所有点(x,y1)?
我正在写一些C#重数学.许多行依次使用大量的abs(),min(),max(),sqrt()等.使用C#是普通的常规方法,我必须在每个函数前加上"Math".例如
double x = Math.Min(1+Math.Sqrt(A+Math.Max(B1,B2)),
Math.Min(Math.Cos(Z1),Math.Cos(Z2)));
Run Code Online (Sandbox Code Playgroud)
我宁愿像C一样编写代码:
double x = min(1+sqrt(A+max(B1,B2)), min(cos(Z1), cos(Z2)));
Run Code Online (Sandbox Code Playgroud)
这更容易阅读,对科学家和工程师来说看起来更自然.正常的C#方式隐藏了"数学"迷雾中的好位.
C#中有没有办法做到这一点?
经过一些谷歌搜索后,我找到了一个让我尝试的例子
using min = Math.Min;
...
double x = min(a,b);
Run Code Online (Sandbox Code Playgroud)
但是"using"语句产生了一个错误,"System.Math.Min(十进制,十进制)是一个方法但是像一个类型一样使用"但是这看起来像是一个很好的解决方案.(无论如何,'小数'是什么?)
使用Julia 0.3.8,我试试这个:
julia> t = [0 0 0 1 1 1 0 0 ]
1x8 Array{Int64,2}:
0 0 0 1 1 1 0 0
julia> findfirst(t)
4
julia> findlast(t)
ERROR: findlast not defined
Run Code Online (Sandbox Code Playgroud)
根据http://julia.readthedocs.org/en/latest/stdlib/arrays/ findlast()存在,与之相比没什么特别之处findfirst().
那么findlast()未定义的是什么?该怎么做?
我正在交互地使用 Python 3.6。如果我将下面的代码从文本文件粘贴到 Python 命令行中,它可以连续多次正常工作。然而,当注释掉show()并启用该pp.savefig(...)行时,每次我粘贴整个代码块时,图例都会重复“abc”几次。到底是怎么回事?有没有办法清除图例,以便每次都重新开始?
import matplotlib.pyplot as pp
pp.title("Szekeres Polynomials")
pp.legend([]) # clears the legend? no!
pp.plot([1,2,3], [8,5,4], '-', label='xxxabc' )
pp.legend(loc='best', shadow=True )
#pp.show()
pp.savefig('TMPxxx.eps', format='eps', dpi=600)
Run Code Online (Sandbox Code Playgroud)