我必须创建一个将向量 v
作为输入的函数和三个标量 a
, b
和 c
.该函数替换 v
的每个元素等于 a
使用二元数组 [b,c]
.
例如,给定 v = [1,2,3,4]
和 a = 2, b = 5, c = 5
,输出将是:
out = [1,5,5,3,4]
我的第一次尝试是尝试这个:
v = [1,2,3,4];
v(2) = [5,5];
但是,我得到一个错误,所以我不明白如何将两个值放在向量中的一个位置,即将所有以下值向右移动一个位置,以便新的两个值适合向量因此,向量的大小将增加一。另外,如果a
有多个值存在于 v
,我不确定如何一次全部替换它们。
我如何在 MATLAB 中执行此操作?
最佳答案
这是一个使用元胞数组的解决方案:
% remember the indices where a occurs
ind = (v == a);
% split array such that each element of a cell array contains one element
v = mat2cell(v, 1, ones(1, numel(v)));
% replace appropriate cells with two-element array
v(ind) = {[b c]};
% concatenate
v = cell2mat(v);
和rayryeng的解决方案一样,它可以替换多次出现的a
。
siliconwafer 提到的阵列改变大小的问题,在这里通过将部分阵列中间保留在单元阵列的单元中来解决。转换回数组会合并这些部分。
关于arrays - 在 MATLAB 中用两个值替换向量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991322/