我有这个矩阵:
A = [92 92 92 91 91 91 146 146 146 0
0 0 112 112 112 127 127 127 35 35
16 16 121 121 121 55 55 55 148 148
0 0 0 96 96 0 0 0 0 0
0 16 16 16 140 140 140 0 0 0]
如何用矩阵B中的混洗连续值替换连续的零值
B = [3 3 3 5 5 6 6 2 2 2 7 7 7]
需要的结果,像这样的矩阵:
A = [92 92 92 91 91 91 146 146 146 0
6 6 112 112 112 127 127 127 35 35
16 16 121 121 121 55 55 55 148 148
7 7 7 96 96 5 5 3 3 3
0 16 16 16 140 140 140 2 2 2]
非常感谢你......
答案 0 :(得分:1)
你可以这样做:
[M,N]=size(A);
for i=1:M
for j=1:N
if A(i,j)==0
A(i,j)=B(i+j);
end
end
end
答案 1 :(得分:0)
如果我从您所描述的内容中正确理解,您的解决方案将需要以下步骤:
for row = 1:size(A, 1)
consecutiveZeroes = [ 2 1 2 ; 4 1 3 ; 4 6 5 ; 5 8 3 ]
表示您在长度为2的(2,1)处运行,在长度为3的(4,1)处运行,运行于(4, 6)长度为5,长度为3的(5,8),replacementValues = [ 3 3 ; 2 5 ; 2 6 ; 3 2 ; 3 7 ]
,意思是三个3,两个5,两个6等。consecutiveZeroes
矩阵中取一行并随机选择一行replacementValues
,指定相同数量的元素,将A
中的零替换为{{1}中的值并删除replacementValues
中的行,以表明您已使用过它。replacementValues
中没有一行描述足够长的值来替换您的一个零游程,请找到replacementValues
中可以使用的两行或更多行的组合你不能只用一次通过矩阵就可以做到这一点,因为你可能有一个像replacementValues
这样的矩阵A和一个像[ 15 7 0 0 0 0 0 0 3 ; 2 0 0 0 5 0 0 0 9 ]
这样的向量B,你只能在那里实现你的目标想要使用四个5和两个7并且不是三个2和三个3来代替六个零的运行,因为你必须在下一行中留下2和3的两个三个零的运行。如果效率不是很关键,那么最简单的方法可能是尝试不同的随机组合多次运行算法,直到你得到一个有效的方法 - 但是如果输入数据确实存在,你需要决定在放弃之前尝试多少次没有解决方案。
如果您遇到任何这些步骤,我建议您提出一个更具体的新问题。