小编car*_*aug的帖子

如何在MATLAB中针对一列对二维数组进行排序?

我想根据特定列对矩阵进行排序.有一个sort函数,但它独立地排序所有列.

例如,如果我的矩阵data是:

 1     3
 5     7
-1     4
Run Code Online (Sandbox Code Playgroud)

然后所需的输出(按第一列排序)将是:

-1     4
 1     3
 5     7
Run Code Online (Sandbox Code Playgroud)

但输出sort(data)是:

-1     3
 1     4
 5     7
Run Code Online (Sandbox Code Playgroud)

如何按第一列对此矩阵进行排序?

sorting matlab matrix octave

45
推荐指数
2
解决办法
6万
查看次数

如何获取matlab数组中最大的元素索引

这是一个简单的双数组:

array=[3 1 1]
Run Code Online (Sandbox Code Playgroud)

最大的元素索引是1

要么:

array=[3 9 1]
Run Code Online (Sandbox Code Playgroud)

最大的元素索引是2

我如何获得最大的元素索引?

matlab max octave

14
推荐指数
1
解决办法
1万
查看次数

在matlab图中自定义x轴值

目前,当我绘制一个9乘6的数组时,该数字的x轴只有1,2,3到9.Y轴显示正确的值.

而不是1到9我想要x轴值是自定义的.他们应该是

100 200 400 1000 2000 5000 10000 20000 50000

代替.我试过了

set(gca,'XTick', [100 200 400 1000 2000 5000 10000 20000 50000])
Run Code Online (Sandbox Code Playgroud)

但这不是正确的做法.是否有Matlab选项可以为x轴设置这些自定义值?为什么Matlab只使用1到9呢?

matlab plot axis octave figure

10
推荐指数
2
解决办法
6万
查看次数

图像处理:对象的旋转对齐

我有一堆图像,靠近中心的酒吧.随着堆叠的进行,杆围绕一端枢转,并且整个堆叠包含图像,其中杆以许多不同的角度旋转,高达或低于水平45度.

如下图所示:

在此输入图像描述

我正在寻找一种方法来旋转条形和/或整个图像,并在我进行其他处理之前水平对齐所有内容.理想情况下,这将在Matlab/imageJ/ImageMagick中完成.我正在尝试使用第一个Canny边缘检测,然后是Hough变换,然后是图像旋转来计算方法,但我希望这是一个已经解决的更普遍问题的特定情况.

matlab image-processing octave imagej

7
推荐指数
1
解决办法
4032
查看次数

mac osx上的Octave安装包失败(分段错误)

我正在尝试将通用软件包(general-1.3.4.tar.gz)安装到octave 3.8.0.我正在使用mac osx Yosemite.我得到分段错误.无论我尝试安装哪个软件包(例如,singal),都会发生这种情况.我安装了xcode和命令行工具.所有帮助将不胜感激.

以下是执行pkg install general-1.3.4.tar.gz时出现的错误:

octave:3> pkg install general-1.3.4.tar.gz
/usr/local/octave/3.8.0/bin/mkoctfile-3.8.0: line 512: 15159 Segmentation fault: 11  /usr/local/octave/3.8.0/bin/g++-mp-4.7 -c -fPIC -I/usr/local/octave/3.8.0/include/octave-3.8.0/octave/.. -I/usr/local/octave/3.8.0/include/octave-3.8.0/octave -I/usr/local/octave/3.8.0/include -pipe -Os -m64 -D_THREAD_SAFE -pthread SHA1.cc -o SHA1.o
make: *** [SHA1.oct] Error 139
/usr/local/octave/3.8.0/bin/mkoctfile-3.8.0 SHA1.cc
pkg: error running `make' for the general package.
error: called from 'configure_make' in file /usr/local/octave/3.8.0/share/octave/3.8.0/m/pkg/private/configure_make.m near line 82, column 9
error: called from:
error:   /usr/local/octave/3.8.0/share/octave/3.8.0/m/pkg/private/install.m at line 199, column 5
error:   /usr/local/octave/3.8.0/share/octave/3.8.0/m/pkg/pkg.m at line 394, column 9*
Run Code Online (Sandbox Code Playgroud)

macos octave package

7
推荐指数
1
解决办法
569
查看次数

向量化区间限制表中的查找值

这是一个关于我们是否可以在matlab中使用矢量化操作类型以避免写入循环的问题.

我有一个矢量

Q = [0.1,0.3,0.6,1.0]
Run Code Online (Sandbox Code Playgroud)

我生成一个均匀分布的随机向量 [0,1)

X = [0.11,0.72,0.32,0.94]
Run Code Online (Sandbox Code Playgroud)

我想知道的每个条目是否X是之间[0,0.1)[0.1,0.3)[0.3,0.6)[0.6,1.0)我想返回包含最大元素的索引向量Q那的每个条目X少于.

我可以写一个for循环

Y = zeros(length(X),1)
for i = 1:1:length(X)
    Y(i) = find(X(i)<Q, 1);
end
Run Code Online (Sandbox Code Playgroud)

此示例的预期结果:

Y = [2,4,3,4]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有办法避免写循环?(我看到我的问题有很多非常好的答案.非常感谢你!如果我们更进一步,如果我的Q是一个矩阵,那么我想检查是否)

Y = zeros(length(X),1)
for i = 1:1:length(X)
    Y(i) = find(X(i)<Q(i), 1);
end
Run Code Online (Sandbox Code Playgroud)

matlab loops vectorization octave

7
推荐指数
3
解决办法
209
查看次数

Brain teaser - 使用移动平均线的过滤算法

我在Matlab中有1秒钟的86400风速(WS)值数据集,需要过滤它的帮助.它需要一定程度的聪明才智.

如果平均WS超过:

  • 在600秒的时间间隔内为25米/秒
  • 在30秒的时间间隔内28米/秒
  • 在3秒的时间间隔内30米/秒

如果满足这些参数中的任何一个,则WS被认为是"无效的",直到平均WS在300秒的时间间隔内保持低于22m/s.

这就是我对600秒要求的要求.我对'dataset'中包含的数据进行了600和300秒的移动平均.我将从平均25m/s的第一次出现到下一次出现低于22m/s的值的间隔过滤为"NaN".过滤后,我将再做600秒的平均值,带有NaN标记值的间隔将保留为NaN.

Rolling600avg(:,1) = tsmovavg(dataset(:,2), 's', 600, 1);

Rolling300avg(:,1) = tsmovavg(dataset(:,2), 's', 300, 1);

a = find(Rolling600avg(:,2)>25)

b = find(Rolling300avg(:,2)<22)

dataset(a:b(a:find(b==1)),2)==NaN; %?? Not sure
Run Code Online (Sandbox Code Playgroud)

这需要巧妙地使用'find'和一些索引.有人可以帮帮我吗?28米/秒和30米/秒的过滤器将采用相同的方法.

indexing matlab filter find octave

6
推荐指数
1
解决办法
625
查看次数

来自另一个 m 文件的 Octave 调用函数

m 文件nraizes(a)从另一个 m 文件调用函数。

clear functions;
clc;
x = input('Insert value for a? ') ;
% call to nraizes()
w = nraizes(x)
clear functions;
Run Code Online (Sandbox Code Playgroud)

带有 nraizes() 函数的 nraizes.m 文件:

printf("\n\n");
printf("nraizes por André Castro - UAB 901396");
printf("\n");
printf("Usar na próxima prompt: nraizes(valor numérico)");
printf("\n");

function n = nraizes(a)

% limpar a memoria de todas as vars e funções
clear functions;

clc;

% intervalo para x
x = 0:.1:25;
% ambas as funções h(x) e g(x)
h = …
Run Code Online (Sandbox Code Playgroud)

function call octave

5
推荐指数
1
解决办法
1万
查看次数

如何从Matlab中保留其大小的矩阵中删除Inf值

我在循环中有一个矩阵

m=


 -132.5901    -137.2695   -114.1264   -131.4986   -134.5733       Inf
       Inf       Inf       Inf        -135.2631   -121.7322       -119.7471
 -132.7978    -123.8068   -135.9385       Inf      -134.1602     -117.6997
 -130.1930    -134.0093   -137.4125   -128.7641       Inf        -116.0473
Run Code Online (Sandbox Code Playgroud)

我想要一个可以在循环中使用的命令来得到答案:

 -132.5901 -137.2695 -114.1264 -131.4986 -134.5733  -119.7471  
 -132.7978 -123.8068 -135.9385 -135.2631 -121.7322  -117.6997
 -130.1930 -134.0093 -137.4125 -128.7641 -134.1602  -116.0473
Run Code Online (Sandbox Code Playgroud)

我不想使用isfinite命令的单个向量.应使用Matlab自动保留矩阵大小.

matlab octave

3
推荐指数
1
解决办法
2856
查看次数

如何对矩阵子集进行向量化,使find()返回一个矩阵?

给定一个矩阵A,我需要找到对应于值1和2的索引.我可以按如下顺序执行:

>> B

B =

     1     2     3
     4     1     6
     7     8     9
     4     5     1

>> find(B==1)

ans =

     1
     6
    12

>> find(B==2)

ans =

     5
Run Code Online (Sandbox Code Playgroud)

但是如果我在循环中进行这种操作,Matlab将只使用我的处理器的一个核心.我如何矢量化它,以便从中获取矩阵find?我想要这个结果:

>> my_find( B, [1 2] )

ans =

    1 5
    6 0
   12 0
Run Code Online (Sandbox Code Playgroud)

(或其他一些填充)

我怎么能得到这个?

matlab vectorization octave

1
推荐指数
1
解决办法
105
查看次数

裁剪矩阵

例如,我有一个6x6矩阵,然后我想取出位于该矩阵中心的小矩阵,比如2x2.有没有聪明的方法呢?或者我必须遍历旧矩阵然后将值复制到新矩阵?
非常感谢你.

matlab octave

0
推荐指数
1
解决办法
3034
查看次数