Tag: matlab

线性索引,逻辑索引等等

我们习惯于在Matlab中使用不同forms的索引: 标准(每个维度使用整数), 逻辑(使用逻辑值), 线性(使用单个索引来遍历具有多个维度的数组)。 乍一看,这些forms似乎是独占的:索引是标准的,或逻辑的或线性的。 但是,有时这些forms中有几种似乎是混合的。 例如, >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> A(A>5) ans = 8 9 6 7 这是合乎逻辑的索引,对吗? 但是它也具有线性索引的一些特征,因为列向量被返回。 实际上,逻辑索引A>5与线性索引find(A>5)具有相同的效果。 作为第二个例子,考虑一下 >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> A(1:2, [true false true]) ans […]

如何把这些图像放在一起?

我有200时间点。 对于每个时间点,有一个图像,其大小是40*40 double ,对应于这个时间点。 例如, image 1对应于time point 1 ; image k对应于time point k ( k = 1,2,…,200 )。 时间点为T = 1:200 ,图像命名为Image_T , Image_1 , Image_2等 我想把所有这200张图片放在一起。 最终尺寸是40*40*200双。 最终的图像看起来像fMRI图像( fmri_szX = 40 , fmri_szY = 40和fmri_szT = 200 )。 如何实现? 谢谢!

arrayfun可以明显慢于matlab中的显式循环。 为什么?

考虑arrayfun的以下简单的速度testing: T = 4000; N = 500; x = randn(T, N); Func1 = @(a) (3*a^2 + 2*a – 1); tic Soln1 = ones(T, N); for t = 1:T for n = 1:N Soln1(t, n) = Func1(x(t, n)); end end toc tic Soln2 = arrayfun(Func1, x); toc 在我的机器上(Linux Mint 12上的Matlab 2011b),这个testing的输出是: Elapsed time is 1.020689 seconds. […]

为什么MATLAB在matrix乘法中如此之快?

我正在用CUDA,C ++,C#和Java做一些基准testing,并使用MATLAB进行validation和matrix生成。 但是,当我乘以MATLAB,2048×2048,甚至更大的matrix几乎立即倍增。 1024×1024 2048×2048 4096×4096 ——— ——— ——— CUDA C (ms) 43.11 391.05 3407.99 C++ (ms) 6137.10 64369.29 551390.93 C# (ms) 10509.00 300684.00 2527250.00 Java (ms) 9149.90 92562.28 838357.94 MATLAB (ms) 75.01 423.10 3133.90 只有CUDA是有竞争力的,但我认为至lessC ++会稍微接近一点,而不是慢60倍。 所以我的问题是 – MATLAB如何快速地做到这一点? C ++代码: float temp = 0; timer.start(); for(int j = 0; j < rozmer; j++) […]

生成一个matrix,其中包含从n个向量中获取的元素的所有组合

这个问题经常以某种forms出现(例如参见这里或这里 )。 所以我想我会以一般forms呈现,并提供一个可供未来参考的答案。 给定任意数量的可能不同大小的vector,生成一个n列matrix,其行描述了从这些vector(笛卡尔乘积)中取出的所有元素的组合。 例如, vectors = { [1 2], [3 6 9], [10 20] } 应该给 combs = [ 1 3 10 1 3 20 1 6 10 1 6 20 1 9 10 1 9 20 2 3 10 2 3 20 2 6 10 2 6 20 2 9 10 2 9 […]

我如何索引一个函数返回的MATLAB数组,而不先将它分配给一个局部variables?

例如,如果我想从magic(5)读取中间值,我可以这样做: M = magic(5); value = M(3,3); 得到value == 13 。 我希望能够做到这样的事情之一: value = magic(5)(3,3); value = (magic(5))(3,3); 省去中间variables。 然而,MATLAB在第三个括号之前抱怨了Unbalanced or unexpected parenthesis or bracket括号。 是否有可能从一个数组/matrix中读取值,而不先将其分配给一个variables?

下标指标必须是真正的正整数或逻辑,通用的解决scheme

以下错误经常发生: 下标指数必须是真正的正整数或逻辑 我发现很多关于这个问题的问题,但没有一个真正的通用答案。 因此,我想有解决这个问题的一般解决scheme。

为什么在MATLAB中24.0000不等于24.0000?

我正在写一个程序,我需要删除存储在matrix中的重复点。 问题是,当检查这些点是否在matrix中时,MATLAB虽然存在,但在matrix中不能识别它们。 在下面的代码中, intersections函数获取交点: [points(:,1), points(:,2)] = intersections(… obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), … [vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]); 结果: >> points points = 12.0000 15.0000 33.0000 24.0000 33.0000 24.0000 >> vertex1 vertex1 = 12 15 >> vertex2 vertex2 = 33 24 应该从结果中删除两个点( vertex1和vertex2 )。 它应该由以下命令完成: points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :); points = points((points(:,1) […]

在Matlab中使用i和j作为variables

i和j是非常stream行的variables名称(例如,见这个问题和这个 )。 例如,在循环中: for i=1:10, % do something… end 作为matrix的指标: mat( i, j ) = 4; 为什么不能在Matlab中用作variables名?

在一个序列中找到零的岛屿

想象一下,你有一个很长的序列。 什么是找到序列全部为零的间隔的最有效的方法(或者更确切地说序列降到接近零的值abs(X)<eps ): 为了简单,让我们假设以下顺序: sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0]; 我试图得到以下信息: startIndex EndIndex Duration 3 6 4 12 12 1 14 16 3 25 26 2 30 30 1 […]