Replacing elements of an array with a vector

I know that you can select elements out of a matrix that meet a condition and assign a new value, i.e.
a = [1 2 3 4 5 6 7 9];
a(a>4) = 0;
a
1 2 3 4 0 0 0 0 0
but what if you have a multidimensional matrix? I want to do something similar to the following:
a = [1 2 3 4; 0 0 0 0];
a(a(1,:)==1) = [a b];
a
a 2 3 4
b 0 0 0
The situation is that I have a matrix where the first three dimensions are spatial and then there's a fourth that contains information about the spatial element. Right now, I'm using For loops to check every element and assign a vector [a b c d] to the spatial element. I would like to vectorize this and it's frustrating how easy it is to do this with one scalers, but it doesn't work with vectors.

2 件のコメント

Laura Proctor
Laura Proctor 2011 年 5 月 31 日
Could you show what it is your starting with and what you would like to have as the result?
Matt Fig
Matt Fig 2011 年 5 月 31 日
I agree, make a real simple example of your actual data and show what you want to do. I am reading this as you have something like this:
A = round(rand(3,3,3,3)); % Sample data
and you want to find, say, all instances which match this:
V = squeeze(A(2,3,2,:))
along the fourth dimension and replace it with, say:
[4;5;6]
Is this close to what you want?

サインインしてコメントする。

回答 (1 件)

Jesús Zambrano
Jesús Zambrano 2019 年 2 月 18 日
編集済み: Jesús Zambrano 2019 年 2 月 18 日

0 投票

Hi Greggory,
According to the solution you show, you can get it by doing:
a(:, a(1,:)==1) = [a; b ]
Best regards,
Jesús

カテゴリ

製品

質問済み:

2011 年 5 月 31 日

編集済み:

2019 年 2 月 18 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by