MATLAB 矩阵范围分配
MATLAB matrix range assignment
是否可以将范围分配给矩阵。
如果您将以下零点矩阵视为用于绘图的 'grid':
R = zeros(5,8);
R =
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
那么你能否将这个矩阵视为一个网格,以便每个 x 轴零都可以视为一个范围?例如 R(5,1)
是一个范围 0-0.1 seconds
。 R(5,2)
是一个范围 0.1-0.2 seconds
等等
范围的想法也可以应用于列吗?
这样做的目的是让我可以将已经组织成范围的元胞数组数据读取到零矩阵中以生成二维直方图。
我不确定我是否理解你的问题。
如果你问,是否可以分配一个向量,例如a = [1;2;3]
,作为某个矩阵R = zeros(3, 5)
中的一列,那么可以通过
来实现
R(:, 1) = a;
R(:, 2) = [4;5;6];
假设您有时间 tt
和数据值 val
,其中 val(i)
包含时间 tt(i)
的数据值。在您的示例中,您将拥有
tt = [0.02, 0.22, 0.15, 0.08, 0.27, 0.09];
val = [0.5, 1.4, 2.5, 0.6 , 0.8, 0.3 ];
现在您需要代表您想要(增加)的时间和数据范围的向量,例如
trange = [0, 0.1, 0.2, 0.3, Inf];
valrange = [0, 1, 2, 3, Inf];
现在你创建一个大小合适的矩阵
R = zeros(length(valrange), length(trange));
您只需遍历所有时间即可轻松填充矩阵
for i=1:length(tt)
%// We consider the pair tt(i), val(i)
%// First find out, in which time range tt(i) lies:
tind = find(trange > tt(i), 1, 'first');
%// Now find out, in which value range val(i) lies:
valind = find(valrange > val(i), 1, 'first');
%// Now we increase the corresponding matrix entry
R(valind,tind) = R(valind,tind) + 1;
end
请注意,第一列对应于 -Inf
到 trange(1)
之间的时间范围,最后一列对应于 trange(end-1)
和 trange(end)==Inf
之间的时间范围。第一行和最后一行都一样。
是否可以将范围分配给矩阵。 如果您将以下零点矩阵视为用于绘图的 'grid':
R = zeros(5,8);
R =
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
那么你能否将这个矩阵视为一个网格,以便每个 x 轴零都可以视为一个范围?例如 R(5,1)
是一个范围 0-0.1 seconds
。 R(5,2)
是一个范围 0.1-0.2 seconds
等等
范围的想法也可以应用于列吗?
这样做的目的是让我可以将已经组织成范围的元胞数组数据读取到零矩阵中以生成二维直方图。
我不确定我是否理解你的问题。
如果你问,是否可以分配一个向量,例如a = [1;2;3]
,作为某个矩阵R = zeros(3, 5)
中的一列,那么可以通过
R(:, 1) = a;
R(:, 2) = [4;5;6];
假设您有时间 tt
和数据值 val
,其中 val(i)
包含时间 tt(i)
的数据值。在您的示例中,您将拥有
tt = [0.02, 0.22, 0.15, 0.08, 0.27, 0.09];
val = [0.5, 1.4, 2.5, 0.6 , 0.8, 0.3 ];
现在您需要代表您想要(增加)的时间和数据范围的向量,例如
trange = [0, 0.1, 0.2, 0.3, Inf];
valrange = [0, 1, 2, 3, Inf];
现在你创建一个大小合适的矩阵
R = zeros(length(valrange), length(trange));
您只需遍历所有时间即可轻松填充矩阵
for i=1:length(tt)
%// We consider the pair tt(i), val(i)
%// First find out, in which time range tt(i) lies:
tind = find(trange > tt(i), 1, 'first');
%// Now find out, in which value range val(i) lies:
valind = find(valrange > val(i), 1, 'first');
%// Now we increase the corresponding matrix entry
R(valind,tind) = R(valind,tind) + 1;
end
请注意,第一列对应于 -Inf
到 trange(1)
之间的时间范围,最后一列对应于 trange(end-1)
和 trange(end)==Inf
之间的时间范围。第一行和最后一行都一样。