提出算法

Coming up with Algorithm

我有一个可变大小的零的 Matlab 数组和一个元胞数组中的字符列表。

元胞数组:

{'0000'}
{'0011'}

我想在数组中为每个 0 位放置 -1,为 1 位放置 1。

示例:

-1 -1 -1 -1   0  0  0  0   0  0  0  0   0  0  0  0
 0  0  0  0  -1 -1 -1 -1   0  0  0  0   0  0  0  0
 ....
 0  0  0  0   0  0  0  0   0  0  0  0  -1 -1 -1 -1

-1 -1  1  1   0  0  0  0   0  0  0  0   0  0  0  0
 ...
 0  0  0  0   0  0  0  0   0  0  0  0  -1 -1  1  1 

如您所见,基于元胞数组位 {0000} 前四个输出行将这 4 个转换后的位完全放置在所有输出行中。第二个字符 {0011} 相同。这种情况下的数组大小为(8 x 16)。数组中从左到右传播的次数 -1 -1 -1 -1 也是可变的——对于这种情况,它最多为 4 列 4 位。

同理,假设有5位:

元胞数组:

{'00000'}
{'00111'}

这将是数组:

-1 -1 -1 -1 -1   0  0  0  0  0  
 0  0  0  0  0  -1 -1 -1 -1 -1  
-1 -1  1  1  1   0  0  0  0  0 
 0  0  0  0  0  -1 -1  1  1  1 

在这种情况下,数组大小为(4 x 10),因为数组中从左到右传播的次数 -1 -1 -1 -1 -1 最多为 2 列 5 位。

第一个示例获得 4 个传播,第二个示例只有 2 个,因为可用列号也是一个变量。这是一个单独的参数。

这是我的代码不起作用:

    counterop=0
    counter=1 
     for i=1: numel(listofss)      % list of ss is the list of charecters (my examples has 3) 
        for c = 1:1:(ss)               % row 
            for e = counter:counter+(n-1)     % column
                A_ss(c  ,e)= -1    %A_ss is the predefined matrix (in my example a  12 by 64 matrix )
            end
             counter=counter + n
             counterop=counterop+1
             end
     end   
     if counterop > n-1
         counter = 1
         counterop=1  
    end

最好能提供带有 for 循环的工作代码。

这是一个使用 kron 的例子:

np = 4;                         % number of permutations/repetitions
nc = 2;                         % number of cells

x   = {'0000','0011'}           % the cell
M   = sign(cell2mat(x.')-48.5)  % convert string to number: ['01'] -> [-1 1]
M   = kron([eye(np)],M)         % apply the kronecker tensor product
ind = reshape(1:nc*np,nc,np).'; % create an alternated index
M(ind(:),:)                     % index the matrix

对于转换,我使用了一个小技巧:'0'- 0 = 48 在 matlab 中,因为 matlab 承认隐式转换。所以matlab取字符'0'对应的ascii值为48.

结果:

M =

  -1  -1  -1  -1   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0  -1  -1  -1  -1   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0  -1  -1  -1  -1   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0  -1  -1  -1  -1
  -1  -1   1   1   0   0   0   0   0   0   0   0   0   0   0   0
   0   0   0   0  -1  -1   1   1   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0  -1  -1   1   1   0   0   0   0
   0   0   0   0   0   0   0   0   0   0   0   0  -1  -1   1   1

要了解此答案的工作原理,您必须阅读一些有关以下内容的文档:kron, cell2mat, implicit castingmatrix indexing and, if you don't know what it is, about the transpose operator .'