我有一個任意矩陣,a = [1, 0, 0, 1]
。MATLAB用另一個矩陣替換矩陣的某些值
我想用另一個矩陣b = [1, 2, 3]
的值替換每個0值,並且每個值都用另一個矩陣的值c = [3, 4, 5]
替換。
因此,我會結束矩陣[3, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 5]
。
我試過找到0和1值的索引,並用b和c替換那些索引的值,但這是不允許的,因爲它們不是相同的大小。有沒有簡單的方法來實現這一點?
我有一個任意矩陣,a = [1, 0, 0, 1]
。MATLAB用另一個矩陣替換矩陣的某些值
我想用另一個矩陣b = [1, 2, 3]
的值替換每個0值,並且每個值都用另一個矩陣的值c = [3, 4, 5]
替換。
因此,我會結束矩陣[3, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 5]
。
我試過找到0和1值的索引,並用b和c替換那些索引的值,但這是不允許的,因爲它們不是相同的大小。有沒有簡單的方法來實現這一點?
鑑於
a = [1, 0, 0, 1];
b = [1, 2, 3];
c = [3, 4, 5];
讓我們先來我們想在最後的矩陣陣列,並把他們在單元陣列:
parts = {b, c}
parts =
{
[1,1] =
1 2 3
[1,2] =
3 4 5
}
的目標是使用的a
值作爲索引到parts
,但要做到這一點,我們需要所有的值從1到一些n
(如果有缺失的值,它將需要更多的工作)是積極的。在這種情況下,我們可以只增加a
:
a_inds = a + 1
a_inds =
2 1 1 2
現在我們可以通過做parts(a_inds)
一個新的單元陣列,或基體加入cell2mat
:
result = cell2mat(parts(a_inds))
result =
3 4 5 1 2 3 1 2 3 3 4 5
我正在寫這篇文章:-) –
@LuisMendo我看到了,偷走了你的答案。忍者布偶! ;) – beaker
這也可以一鍵完成:價值地圖。
a = [1, 0, 0, 1];
b = [1, 2, 3];
c = [3, 4, 5];
keyset = [1,0];
valueset = {b,c};
mapobj = containers.Map(keyset,valueset);
new_vec = [];
for i =1:length(a)
new_vec(length(new_vec)+1:length(new_vec)+length(mapobj(a(i))))= mapobj(a(i));
end
1
被映射到b
並0
映射到c
。 for循環遍歷a
構建一個包含映射值的更長的向量。
此代碼將允許非連續的鍵,以便可以將37添加並映射到另一個向量,而在上一個答案中,您必須將2
映射到下一個向量才能使代碼不中斷。
'b'和'c'會有相同的尺寸嗎? –