gpt4 book ai didi

matlab - 为什么 MATLAB surf 函数不能处理单精度数据?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:43 26 4
gpt4 key购买 nike

我有一个单一类型的值矩阵,我想将其绘制为一个表面。当我尝试在 MATLAB 中使用 surf 函数时,我收到一条错误消息,指出我需要改用 uint8 或 double:

x=peaks; %# Initialize x to a matrix of doubles
surf(x); %# No problem when x is of type double

现在我试试单打:

x=single(peaks);
surf(x);

出现以下错误:

Warning: CData must be double or uint8. 
Warning: CData must be double or uint8.

嗯,这很不幸。我想我必须将颜色图的精度提高到 double :

x=single(peaks);
surf(x,double(x));

工作正常。但为了好玩,我们也试试 uint8:

x=single(peaks);
surf(x,uint8(x));

产生以下内容:

Warning: CData must be double or single unless it is used only as a texture data 
Warning: CData must be double or single unless it is used only as a texture data

到底是什么 MATLAB?拿定主意!那么,为什么我必须使用 double 形式的额外内存来表示 surf 函数的颜色图?即使 MATLAB 错误文本告诉我可以使用 uint8 single,这取决于我没有使用哪个?

最佳答案

喜欢这个问题。

不确定您是否看到了 this或不,但它至少解决了你同样的厌恶。听起来 Michael 对 uint8 算法的性能感到失望,因为他描述说它似乎为自己创造了更多的计算工作,但情节并不符合他的审美需求。我用 peaks 示例尝试了它,这就是我得到的:

Raw Peaks Data

然后我添加了一个偏移量以获取所有绘图。

Offset Peaks Data

嗯,我想这很好。这是代码,希望这对您有用。

% Test code from Matlab Central
a=256*rand(5);
b=uint8(a);
figure;
surf(b,'facecolor','texturemap')

% get the example peaks data
% and plot without any scaling
x = peaks;
figure;
surf(uint8(x),'facecolor','texturemap')

% get the offset to keep all the data positive
% not pretty but functional
xp = x-min(min(x))+1;
figure;
surf(uint8(xp),'facecolor','texturemap')

关于matlab - 为什么 MATLAB surf 函数不能处理单精度数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com