[英]How do I populate matrix with a vector, considering Matrix as chart and vector as line
考虑以下值
result=zeros(11,11);
line=(4:0.4:8);
想象一下结果是11x11 XY图表纸。 所以最初我们有一张空白的图表纸。 就像在图表中一样,我想在结果矩阵中填充线的值,以便在显示矩阵时获得向上倾斜的线。
考虑以下我想要的结果图。
在这里,结果矩阵可以显示为图表纸,其原点位于左下角。 现在,对于X = 1,第(1)= 4行; 对于X = 2,行(2)= 4.4,等等。
我编写了以下代码来达到目的。
result=zeros(11,11);
line=(4:0.4:8);
for i=1:length(line)
temp=floor(line(i));
result(length(line)-temp+1,i)=line(i);
end
有没有更有效的方法来实施此解决方案? (我将使用20000x20000矩阵,因此方法需要快速)
如注释中所建议,问题描述如下:
我可以说一千行。 所有这些线具有不同的斜率和截距。 我知道线的x范围和线的y范围。 如果将这些线同时绘制在一个图上,那么我就无法从数据中推断出什么。 生成的图像将如下所示:
关于这个情节没有什么可以推断的。 但是,如果我可以将此信息保存在一个大矩阵中,则可以分析在特定X索引处通过的最大行数,并据此进行进一步分析。
更多详情
我将Y轴离散化为1000个等距间隔:示例代码如下:
range=max(data)-min(data);
percent=0.20;
outerRange= max(data)+range*percent - (min(data)-range*percent);
outerRangeValues=min(data)-range*percent:outerRange/1000:max(data)+range*percent;
即使一条特别陡峭的线完全有可能穿过单列中的2行或更多行,我也只会选择在单列中仅一行填充行。 这可以通过获取特定列的行值的平均值并将单个行分配为其该列的值来完成
您可以使用sub2ind
保持事物矢量化并避免循环。
这个想法是找到所有必须修改的行和列索引。
对于X
轴,这很容易,每列只需一个,因此X
索引将为1,2,3,...,np
。
对于Y
轴,必须将line
值合并到Y
网格中。 由于索引必须是整数,因此您必须将浮点值转换为整数。 为此,您可以在round
, floor
和ceil
之间选择。 每个值将放置一些稍有不同的值,由您决定哪种舍入方法对您的问题有意义。
一旦有了索引[row_indices,column_indices]
,就可以使用sub2ind
将它们转换为线性索引到矩阵中,然后将line
的值分配给这些线性索引。
在代码中:
line=(4:0.4:8); % your input (line vector)
np = numel(line) ; % determine size of matrix/chart
% identify column and row indices to modify
idCol = 1:np ;
idRow = fliplr( round( line ) ) ; % choose "round", "floor" or "ceil"
% build the result
result = zeros(np);
linearInd = sub2ind( [np,np], idRow, idCol ) ;
result(linearInd) = line ;
给你:
>> result
result =
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 7.2 7.6 8
0 0 0 0 0 0 6.4 6.8 0 0 0
0 0 0 5.2 5.6 6 0 0 0 0 0
0 4.4 4.8 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.