Учитывая B = {"7" "8" "9"}
, я хотел бы использовать его значения в качестве соответствующих замен для конечных элементов каждой ячейки в A
, то есть преобразовать
A = {{1 2} {3 4} {5 6}}
в
A = {{1 "7"} {3 "8"} {5 "9"}}
В невекторизованной форме это может быть записано как:
nn = cellfun(@numel, A)
for i = 1:numel(a)
A{i}{nn(i)} = B{i};
end
Все подэлементы могут иметь одинаковую длину, но решение для подэлементов произвольной длины будет идеальным.
Единственное решение, которое я нашел, заключается в создании измененной копии A:
nn = cellfun(@numel, A) #=> 2 2 2
A2 = horzcat(A{:}) #=> {1 2 3 4 5 6}
jj = cumsum(nn) #=> 2 4 6
[A2{jj}] = B{:} #=> {1 "7" 3 "8" 5 "9"}
ii = [1 jj(1:end-1)+1] #=> 1 3 5
A = cellslices(A2,ii,jj,2) #=> {{1 "7"} {3 "8"} {5 "9"}
Я бы надеялся, что что-то подобное будет работать - но это не так:
octave:1> [[A{:}]{ii}] = B{:}
error: invalid lvalue function called in expression
Есть ли способ векторизации этой операции?