我在R和MATLAB上使用多维数组,这些数组有五个维度(总共14.5M的元素).我必须删除一个应用算术平均值的维度,我发现使用这两个软件的性能差异很大.
MATLAB:
>> a = rand([144 73 10 6 23]);
>> tic; b = mean(a,3); toc
Elapsed time is 0.014454 seconds.
Run Code Online (Sandbox Code Playgroud)
R:
> a = array(data = runif(144*73*6*23*10), dim = c(144,73,10,6,23))
> start <- Sys.time (); b = apply(a, c(1,2,4,5), mean); Sys.time () - start
Time difference of 1.229083 mins
Run Code Online (Sandbox Code Playgroud)
我知道应用函数很慢,因为它类似于通用函数,但我不知道如何处理这个问题,因为这种性能差异对我来说真的是一个很大的限制.我试图搜索colMeans/rowMeans函数的泛化,但我没有成功.
编辑 我将展示一个小样本矩阵:
> dim(a)
[1] 2 4 3
> dput(aa)
structure(c(7, 8, 5, 8, 10, 11, 9, 9, 6, 12, 9, 10, 12, 10, 14,
12, 7, 9, 8, …Run Code Online (Sandbox Code Playgroud) 我注意到MATLAB有时会错误地显示我的颜色.我不确定这是否是我的编程错误,或者它是否是MATLAB中的实际错误.在过去一年左右的时间里,我注意到这种行为具有一定的规律性.
这一次,我决定拍摄一张有关错误的图片的快照(在Windows 7,64位的MATLAB 2011b上拍摄):

显示相关图像的代码如下:
figure;
clf;
cla;
imshow(matrix, []);
colormap(cmap);
set(gca, 'Clim', [0 highest_index]);
Run Code Online (Sandbox Code Playgroud)
哪里:
matrix是类型的uint32(虽然我还试图explitly铸造matrix如double之前调用imshow)matrix范围内的值0和900cmap有901条目highest_index 是 900该值的RGB条目259中matrix是[1, 0, 0.1]上方和颜色表阵列中的图像二者中cmap的,即cmap(300, :) = [1, 0, 0.1](注意到矩阵值259获得索引300在颜色表中,由于颜色表的第一条目是用于矩阵值0).
为什么会这样?这是一个错误吗?有什么我做错了吗?
CDataMapping到direct或scaled,但它没有任何区别.imagesc而不是imshow,但它并没有什么区别.如果我首先将图像转换为RGB(indexed …
我正在打印一大堆数字作为.png文件.每个图都是数据矩阵中一列的图,我将.png文件和它们串在一起形成一个动画.
我的问题是前几百张图像打印速度很快,但创建每个新图形的时间会迅速增加,从前几百个.png文件的~0.2秒增加到大约800个图像的2秒或更多.
在脚本运行期间内存使用量会增加,但每隔几秒左右只会增加1MB.这是在Windows上运行R2009b 64位.
我的代码看起来像:
n = 1000;
matrix = rand(n);
f = figure('Visible','off'); % create the figure
for i_ =1:n
plot(1:n,matrix(:,i_));
ylim([0 1]);
set(f,'PaperUnits','inches','PaperPosition',[0 0 6 4]);
png_name = [ 'img/timestep_' sprintf('%05d',i_) ];
print('-dpng', png_name);
end
Run Code Online (Sandbox Code Playgroud) 我一直在学习C++ AMP,我所看到的一切都强调AMP在"加速器"上工作,而不仅仅是GPU.我认为今天所有加速器都是GPU,但未来可能会有不同类型的加速器.那还有什么可以成为加速器呢?现在正在开发新型加速器,还是AMP只是试图成为未来的证据?
我试图将一个double舍入到最接近的两位小数,但它只是四舍五入到最接近的完整数.
例如,19634.0而不是19634.95.
这是我用于舍入的当前代码
double area = Math.round(Math.PI*Radius()*Radius()*100)/100;
Run Code Online (Sandbox Code Playgroud)
我看不出我错在哪里.
非常感谢任何帮助.