Editing multiple elements of an array in one line

My problem is this, I have a huge array and I want to edit multiple elements of the same array that I know the location of. Here's how I would assume this should work based on how matlab handles arrays
h = zeros(10,10,10,2); % just a simple example array
b = [10 5]; % elements I want to place in new location
i = [1 2]; % "locations" I want to place them in
h = h(1,1,1,i) + b(i)
Now what I would expect is for h(1,1,1,1) = 10 and h(1,1,1,2) = 5. But instead what you get is h(1,1,1,1) = [10 5] and h(1,1,1,2) = [10 5]
Why is this? I know a solution is to simple edit them in a loop, however this isn't actually answering the problem.
Thanks

 採用された回答

Rik
Rik 2018 年 5 月 16 日

1 投票

The error you get for your example will probably depend the release. On R2018a, the implicit expansion tries to expand b to fit the 4D selection from h. What I needed to do is make sure that b is 1x1x1x(numel(b)):
h = zeros(10,10,10,2); % just a simple example array
b = [10 5]; % elements I want to place in new location
i = [1 2]; % "locations" I want to place them in
h(1,1,1,i) = h(1,1,1,i) + permute(b(:),numel(size(h)):-1:1);
h(1,1,1,1)
h(1,1,1,2)

2 件のコメント

Kyle Ruzic
Kyle Ruzic 2018 年 5 月 16 日
Sorry I edited the question as you were typing your answer to change h(1,1,1,i) to just h, which is what I was doing to produce the result I mentioned in the question.
I'm a bit confused by how this
permute(b(:),numel(size(h)):-1:1);
is changing the size of b.
Thanks for the quick response!
Rik
Rik 2018 年 5 月 16 日
If you read the doc for permute, you can see that it changes the order of the dimensions, so in this case, the 2x1 vector resulting from the b(:) operation, is changed. A 2x1 vector is the same as a 2x1x1x1 array, so permute uses the vector [4 3 2 1] (the output of numel(size(h)):-1:1)) to change this to 1x1x1x2, which fits the excerpt from h defined by the h(1,1,1,i) operation.

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

製品

リリース

R2018a

質問済み:

2018 年 5 月 16 日

コメント済み:

Rik
2018 年 5 月 16 日

Community Treasure Hunt

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

Start Hunting!

Translated by