小编gno*_*ice的帖子

MATLAB:使用字段作为结构数组确定结构数组的总长度/大小

我有一个结构数组包含字段作为不同长度的结构数组.例如:

's'是一个结构'data'是's'中的一个字段,也是一个结构数组本身和

length(s(n).data) ~= length(s(m).data)
Run Code Online (Sandbox Code Playgroud)

我想预先分配一个数组,该数组从每个字段s.data.timestamp中获取一个时间戳.有没有办法在不使用for循环两次的情况下执行此操作?这是我到目前为止:

% find the total length
count=0;
for x=1:length(s)
  count=count+length(s(x).data);
end
% preallocate timestamp array
timestamp=zeros(1,count);
% populate timestamp array
index=1;
for x=1:length(s)
   for y=1:length(s(x).data)
      timestamp(index)=s(x).data(y).timestamp;
      index=index+1;
   end
end
Run Code Online (Sandbox Code Playgroud)

我想过根据's'的长度和'数据'的平均长度过高估计我需要的长度,但每个'数据'字段/子结构的实际长度变化很大.我是否会更好地过高估计它的结果并在之后修剪得到的数组?使用我正在使用的数据集时,零时间戳是不可能的,所以这应该不是问题.

arrays matlab memory-management matlab-struct

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

平均损坏的图像以消除MATLAB中的噪声的问题

我想平均一些被零均值高斯加性噪声破坏的.jpg图像.在搜索之后,我想出了添加图像矩阵并将总和除以矩阵的数量.但是,得到的图像是全黑的.通常,当图像数量增加时,结果图像变得更好.但是当我使用更多图像时,它会变暗.

我使用800x600黑白.jpg图像.这是我使用的脚本:

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);
Run Code Online (Sandbox Code Playgroud)

matlab image-manipulation image corruption noise

4
推荐指数
2
解决办法
972
查看次数

MATLAB pdist函数

我使用pdist命令查找存储在矩阵中的x和y坐标之间的距离.

X = [100 100;
      0  100;
     100  0;
     500 400;
     300 600;];

D = pdist(X,'euclidean')
Run Code Online (Sandbox Code Playgroud)

返回15个元素向量.:

[0.734979755525412 3.40039811339820 2.93175207511321   1.83879677592575 2.40127440268306 2.75251513299386 2.21488402640753 1.10610649500317 1.81674017301699 0.903207751535635 1.99116952754924 1.05069952386082 1.24122819418333 1.08583377275532 1.38729428638035]
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些距离与它们的坐标相关联,即将它们存储在具有一般行形式的矩阵中:

[Length xcoordinate1 ycoordinate1 xcoordinate2 ycoordinate2]
Run Code Online (Sandbox Code Playgroud)

找到每个长度的行?

提前致谢

matlab matrix pdist

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

MATLAB中的单元格和数组的连接和索引有何不同?

我对MATLAB中的单元格和数组的使用有点困惑,并希望对几点进行一些澄清.以下是我的观察:

  1. 数组可以动态调整自己的内存以允许动态数量的元素,而单元格似乎不会以相同的方式运行:

    a=[]; a=[a 1]; b={}; b={b 1};
    
    Run Code Online (Sandbox Code Playgroud)
  2. 可以从单元格中检索多个元素,但它们似乎不是来自数组:

    a={'1' '2'}; figure; plot(...); hold on; plot(...); legend(a{1:2});   
    b=['1' '2']; figure; plot(...); hold on; plot(...); legend(b(1:2));
    %# b(1:2) is an array, not its elements, so it is wrong with legend.
    
    Run Code Online (Sandbox Code Playgroud)

这些是正确的吗?单元格和数组之间有什么其他不同的用法?

arrays indexing matlab concatenation cell

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

在MATLAB中对矩阵进行排序时如何维护行?

我有一个2乘3的矩阵,我想根据第一列对它进行排序.这是一个例子:

data   will change to -->  new data
11 33                      10 22
22 44                      11 33 
10 22                      22 44 
Run Code Online (Sandbox Code Playgroud)

我有这个代码用于排序矩阵,A但它不能很好地工作:

sort(A,1,'ascend');
Run Code Online (Sandbox Code Playgroud)

sorting matlab matrix

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

在MATLAB中,如何方便地为函数提供许多参数?

我有一个MATLAB函数myfun(v1,v2,v3,v4,v5,v6)和一个30x6矩阵A.调用该函数的方法是将每列A作为单独的输入参数传递:

myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有更好的方法来做这个没有明确写出这么多次A(:,*)

matlab arguments input function

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

有没有办法在MATLAB中执行函数内联?

我可以使用什么语言功能或开箱即用的黑客来完成MATLAB中的函数内联?令人讨厌的是,Google搜索"matlab内联函数"表明,MATLAB的设计者认为"内联"意味着"用字​​符串构造一个匿名函数"(... wtf?).

我问的原因是我正在编写一个需要快速运行的脚本,而且我遇到很多情况,让一个帮助函数处理一些简单的添加或者某些东西来避免一个一个错误.但是,函数调用的成本(以度量衡量tic/toc)是不值得的.我拒绝相信MATLAB缺少函数内联功能,因为这会阻止分解!

最糟糕的情况是,我可以使用M4宏.


编辑:回应吃的评论,这里是一个我可能想要帮助内联的情况:

有一次,我需要windowWidth在列表中的所有宽度窗口上循环(是的,我知道):

lastWindowStartIdx = length(list) - windowWidth + 1;
for windowStartIdx = 1:lastWindowStartIdx
   display(list[windowStartIdx:windowStartIdx+windowWidth-1]); %the window we're looking at
end
Run Code Online (Sandbox Code Playgroud)

如果能够分解那些棘手的,逐个错误的windowWidth计算,那将是很好的.例如:

lastWindowStartIdx = calcLastWindowStartIdx(length(list), windowWidth);
for windowStartIdx = 1:lastWindowStartIdx
   display(list[windowStartIdx:calcWindowEndIdx(windowStartIdx, windowWidth)]); %the window we're looking at
end
Run Code Online (Sandbox Code Playgroud)

syntax macros matlab inline function

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

尝试在MATLAB中使用parfor(并行for循环)时出错

我正在处理一个非常庞大的矩阵,因此希望在MATLAB中使用并行计算来运行集群.在这里,我使用以下方法创建了一个稀疏矩阵

Ad = sparse(length(con)*length(uni_core), length(con)*length(uni_core));
Run Code Online (Sandbox Code Playgroud)

我有一个书面函数,adj使用它我可以填充矩阵Ad.的循环运行时,都会从功能adj我得到的方形对称矩阵将被分配给Ad3682*(i-1)+13682 *(i-1)+3682在第一索引并且类似地在第二索引.这显示在这里:

parfor i = 1:length(con)
  Ad((3682*(i-1))+1:((3682*(i-1))+3682), ...
     (3682*(i-1))+1:((3682*(i-1))+3682)) = adj(a, b, uni_core);
end
Run Code Online (Sandbox Code Playgroud)

在正常的for循环中,它运行没有任何问题.但在parfor并行计算中,我收到的错误是使用切片数组时出现问题parfor.

parallel-processing matlab loops

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

RGB图像到二进制图像

我想在MATLAB中加载RGB图像并将其转换为二进制图像,我可以在其中选择二进制图像具有多少像素.例如,我将300x300 png/jpg图像加载到MATLAB中,最终得到的二进制图像(像素只能是#000或#FFF)可能是10x10像素.

这是我到目前为止所尝试的:

load trees % from MATLAB
gray=rgb2gray(map); % 'map' is loaded from 'trees'. Convert to grayscale.
threshold=128;
lbw=double(gray>threshold);
BW=im2bw(X,lbw); % 'X' is loaded from 'trees'.
imshow(X,map), figure, imshow(BW)
Run Code Online (Sandbox Code Playgroud)

(我从互联网搜索中得到了一些上述内容.)

在做这个时,我最终得到了一个黑色的图像imshow(BW).

rgb matlab image image-processing

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

计算离散卷积"乘积"的有效方法

我正在寻找一种优雅的方法来计算离散卷积的"乘积",而不是总和.

这是离散卷积的公式:

在此输入图像描述

在这种情况下,我们可以使用: conv(x,y)

现在我想实现这些操作

在此输入图像描述

当然我可以使用一个循环,但我正在寻找一个技巧来线性化这个操作.

例:

f = [2 4 3 9 7 1]
g = [3 2 1]

dist = length(g)-1;

for ii = 1:length(f)-dist
    x(ii) = prod(f(ii:ii+dist).*g)
end
Run Code Online (Sandbox Code Playgroud)

x =

144    648   1134    378
Run Code Online (Sandbox Code Playgroud)

arrays matlab multiplication convolution sliding-window

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