我想根据特定列对矩阵进行排序.有一个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)
如何按第一列对此矩阵进行排序?
这是一个简单的双数组:
array=[3 1 1]
Run Code Online (Sandbox Code Playgroud)
最大的元素索引是1
要么:
array=[3 9 1]
Run Code Online (Sandbox Code Playgroud)
最大的元素索引是2
我如何获得最大的元素索引?
目前,当我绘制一个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呢?
我有一堆图像,靠近中心的酒吧.随着堆叠的进行,杆围绕一端枢转,并且整个堆叠包含图像,其中杆以许多不同的角度旋转,高达或低于水平45度.
如下图所示:

我正在寻找一种方法来旋转条形和/或整个图像,并在我进行其他处理之前水平对齐所有内容.理想情况下,这将在Matlab/imageJ/ImageMagick中完成.我正在尝试使用第一个Canny边缘检测,然后是Hough变换,然后是图像旋转来计算方法,但我希望这是一个已经解决的更普遍问题的特定情况.
我正在尝试将通用软件包(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) 这是一个关于我们是否可以在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中有1秒钟的86400风速(WS)值数据集,需要过滤它的帮助.它需要一定程度的聪明才智.
如果平均WS超过:
如果满足这些参数中的任何一个,则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米/秒的过滤器将采用相同的方法.
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) 我在循环中有一个矩阵
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自动保留矩阵大小.
给定一个矩阵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)
(或其他一些填充)
我怎么能得到这个?
例如,我有一个6x6矩阵,然后我想取出位于该矩阵中心的小矩阵,比如2x2.有没有聪明的方法呢?或者我必须遍历旧矩阵然后将值复制到新矩阵?
非常感谢你.