Contents



n次元マトリクスがあって、すべての要素の和やすべての要素の中の最大値,最小値などを知りたいときには、どのような関数を使えばいいのでしょうか?

sum()やmax()で普通にいけます
例:
A = rand(3,3,3,3)%4次元マトリックス
% 和
sum(A(:)) % A(:)とすると全要素が一次元ベクトルになって出力される
% 最大
max(A(:))
% 最小
min(A(:))
(まーぼ) 2009-01-07 14:36:10


正方行列を斜めにつぶす簡単な方法はないですか?45度方向に足しこみたいんですが…

diagを使って対角行列を抽出するのはダメポ(;´Д`) ですか?45度方向だと逆(diagは135度方向ですか?)ですが、行列を左右反転(fliplr())すれば、いいはずです。あと、for文使えば出来ます。
例としてAを正方行列として、
C=fliplr(A);
for n=-length(C)+1:legth(C)-1
B(n+length(C))=sum(diag(C,n));
end
んで、出来るかな?でも、もっと簡単な方法がありそう
(すくなくとも VIPでつながった仲間だから) 2007-06-22 21:11:55


3*10000の行列に関して、特定の列パタン(例えば[0.5;1;0.1]みたいな)の数を数えたいとき、いい方法はありますか?
今は、行列aに対し、sum(a(1,:)==0.5 & a(2,:)==1 & a(3,:)==0.1)でやってるのですが、もっといけてる方法があれば教えてください。

v = [0.5; 1; 0.1]
のとき、
sum(prod(double(a==v*ones(1,10000))))
はどうでしょう?
スピードは遅くなりそうですが、vの要素数が
増えても書き換えなくて済みます
(まーぼ) 2007-07-06 19:09:28


0と1が無作為に並んでる数列があって、そのうち1が連続して並んでる場合、その偶数番目を0にしたいんですけど、エレガントな方法があれば教えてください。たとえば[0 1 0 1 1 0 1 1 1 1 1 0 1 1 0]の場合は[0 1 0 1 0 0 1 0 1 0 1 0 1 0 0]としたいわけです。

A=[0 1 0 1 1 0 1 1 1 1 1 0 1 1 0];
for i=2:length(A)
if( (A(i-1)+A(i)) == 2 )
A(i)=0;
end
end

Matlabぽくないけど、これしか思いつきません。
たとえば、[1 1 1 1]があればi=2の時に、[1 0 1 1]
i=3の時には2番目は0になっているので、スルー。
i=4の時、[1 0 1 0]です。
(excel使い) 2007-10-20 11:31:14


matlabで連立方程式を解きたいのですが、どのようにすればよいのでしょうか。どなたかお願いします。

Y = (y1, y2, ..., yn)、X = (x1, x2, ..., xn)、Y = A*X
のとき、
X=inv(A)*Y
とかではだめですか?また、ヘルプを読むと「Aが正方の場合、X = A\Bは、線形システムA*X = Bの解です。」と書いてあり、'\'(バックスラッシュ)演算子を使うといいみたいです。
(てっぺ) 2007-01-01 16:43:39


x = [1:1:27]; y = [2 4 5 7 8]; xからy以外の値を抜き出すとき、x(y)=0; z = find(x~=0);と、どうしても2行使ってしまいます。このように、ある行列から特定のindex以外を抜き出したい場合。上記以外の方法は何かありますか?

setdiff(A,B)を使えばできます。
help setdiff
SETDIFF(A,B) は、A と B がベクトルのとき、A の要素で B の要素でない値を出力します。結果は、ソートされます。
質問の場合だと、
z=x( setdiff( 1:length(x) ,y) );
(morimo) 2007-01-29 14:34:05
最終更新:2009年01月07日 23:20