配列の1つの要素だけ​をスカラーとして変数​に直接代入したい

21 views (last 30 days)
Keita Abe
Keita Abe on 21 Oct 2022
Commented: Keita Abe on 22 Oct 2022
代入式の右辺の配列の1つの要素だけを指定して直接左辺の変数に代入するにはどうすればできるでしょうか?
たとえば次のようなコードを書いた場合,一旦行列の変数(B)を介しているのでそれを省いて直接A(i)=(rand(3)^(i)*rand(3,1),1)のような形で書きたいです。
for i = 1:5
B = rand(3)^(i)*rand(3,1);
A(i) = B(1);
end
  2 Comments
Atsushi Ueno
Atsushi Ueno on 22 Oct 2022
回答できないですね。質問の求める方法は無く、質問のコード例が必要最小限の書き方だと思います。
下記方法が考えられますが最後に余分なデータが残り、結局 A(1:5)とアクセスする必要があります。
for i = 1:5
A(i:i+2) = rand(3)^(i)*rand(3,1)
end
A = 1×3
0.5153 0.7113 0.5870
A = 1×4
0.5153 1.5374 1.0471 1.2612
A = 1×5
0.5153 1.5374 3.9947 4.8464 4.6945
A = 1×6
0.5153 1.5374 3.9947 3.5763 5.1415 4.5717
A = 1×7
0.5153 1.5374 3.9947 3.5763 0.6056 0.3200 0.7157
メモリには困らない時代なので、計算結果を広げて必要箇所を拾っていく(不要部分を捨てていく)形が良いと思います。
arrayfun(@(i) rand(3)^(i)*rand(3,1), 1:5, 'uni', false)
ans = 1×5 cell array
{3×1 double} {3×1 double} {3×1 double} {3×1 double} {3×1 double}
cell2mat(ans)
ans = 3×5
0.2319 0.9178 2.7108 0.5854 4.1601 0.3789 0.5266 4.0728 0.1230 1.8014 0.4240 1.8209 1.7666 0.5663 4.6434
ans(1,:)
ans = 1×5
0.2319 0.9178 2.7108 0.5854 4.1601
Keita Abe
Keita Abe on 22 Oct 2022
コメントありがとうございました。コード例もありがとうございます。現状そのような方法がないこと、納得しました。

Sign in to comment.

Answers (0)

Categories

Find more on Matrix Indexing in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!