power, .^
要素単位のべき乗
説明
例
行列 A を作成し、各要素の逆数を取ります。
A = [1 2 3; 4 5 6; 7 8 9]; C = A.^-1
C = 3×3
1.0000 0.5000 0.3333
0.2500 0.2000 0.1667
0.1429 0.1250 0.1111
要素ごとの逆数は行列の逆行列と等価ではありません。逆行列は、A^-1 または inv(A) と記述されます。
1 行 2 列の行ベクトルと 3 行 1 列の列ベクトルを作成し、行ベクトルを列ベクトルでべき乗します。
a = [2 3]; b = (1:3)'; a.^b
ans = 3×2
2 3
4 9
8 27
結果は、3 行 2 列の行列になります。ここで、行列の各 (i,j) 要素は (j) .^ b(i) と等しくなります。
-1 の 1/3 べき乗を計算します。
A = -1; B = 1/3; C = A.^B
C = 0.5000 + 0.8660i
負の基数 A および整数でない B の場合、関数 power は複素数を返します。
実数の根を求めるには、関数 nthroot を使用します。
C = nthroot(A,3)
C = -1
R2023a 以降
2 つの table を作成し、最初の table を 2 番目の table で累乗します。行名 (両方に存在している場合) および変数名は同じでなければなりませんが、同じ順序である必要はありません。出力の行および変数は、最初の入力と同じ順序になります。
A = table([1;2],[3;4],VariableNames=["V1","V2"],RowNames=["R1","R2"])
A=2×2 table
V1 V2
__ __
R1 1 3
R2 2 4
B = table([4;2],[3;1],VariableNames=["V2","V1"],RowNames=["R2","R1"])
B=2×2 table
V2 V1
__ __
R2 4 3
R1 2 1
C = A .^ B
C=2×2 table
V1 V2
__ ___
R1 1 9
R2 8 256
入力引数
オペランド。スカラー、ベクトル、行列、多次元配列、table、または timetable として指定します。A と B は、同じサイズであるか、互換性のあるサイズでなければなりません (たとえば、A が M 行 N 列の行列で、B がスカラーまたは 1 行 N 列の行ベクトル)。詳細については、基本的な演算で互換性のある配列サイズを参照してください。
整数データ型のオペランドは、複素数にできません。
table または timetable である入力は次の条件を満たさなければなりません。 (R2023a 以降)
入力が table または timetable の場合、すべての変数のデータ型で演算がサポートされている必要があります。
一方の入力だけが table または timetable の場合、もう一方の入力は数値または logical 配列でなければなりません。
両方の入力が table または timetable の場合、以下のとおりです。
両方の入力のサイズが同じであるか、一方が 1 行の table でなければなりません。
両方の入力に同じ名前をもつ変数が含まれている必要があります。ただし、各入力の変数の順序は異なっていてもかまいません。
両方の入力が table で、両方とも行名をもつ場合、行名は同じでなければなりません。ただし、各入力の行名の順序は異なっていてもかまいません。
両方の入力が timetable の場合、行時間が同じでなければなりません。ただし、各入力の行時間の順序は異なっていてもかまいません。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | table | timetable
複素数のサポート: あり
詳細
実数入力の場合、power の動作の一部が IEEE®-754 Standard で推奨されている動作とは異なります。
| MATLAB® | IEEE | |
|---|---|---|
|
|
|
|
|
|
ヒント
反復乗法に
timesまたは.*を使用すると、powerまたは.^で整数の指数を使用するよりも速くなることがあります。ただし、反復乗法では誤差が蓄積するため、丸め誤差が大きくなります。このことはdoubleデータ型で特に重要になります。int64など、丸め誤差が問題にならないデータ型にはtimesを使用できます。たとえば、x = int64(randi([1, 10], 10000, 1));と定義している場合、演算y = x.*x.*x;の方がy = x.^3;より速くなります。
拡張機能
power 関数は tall 配列を完全にサポートしています。詳細については、tall 配列を参照してください。
使用上の注意および制限:
XとYの両方が実数であり、power(X,Y)またはX .^ Yが複素数である場合、シミュレーションでエラーが発生し、生成されたコードはNaNを返します。正しい複素数の結果を得るには、complex(X)を使用して値Xを複素数に変換します。たとえば、power(complex(X),Y)やcomplex(X).^Yなどです。コード生成では、この関数のスパース行列入力はサポートされません。
使用上の注意および制限:
XとYの両方が実数であり、power(X,Y)またはX .^ Yが複素数である場合、シミュレーションでエラーが発生し、生成されたコードはNaNを返します。正しい複素数の結果を得るには、complex(X)を使用して値Xを複素数に変換します。たとえば、power(complex(X),Y)やcomplex(X).^Yなどです。コード生成では、この関数のスパース行列入力はサポートされません。
どちらの入力もスカラーでなければならず、また指数の入力 k は整数でなければなりません。
power 関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
power 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
底
Aまたは指数Bがスパースな場合、Bはスカラーでなければなりません。GPU で実行される関数の出力が複素数になる可能性がある場合は、入力引数を明示的に複素数として指定しなければなりません。詳細については、GPU 上での複素数の処理 (Parallel Computing Toolbox)を参照してください。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
power 関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入power 関数 (.^) で、整数の指数を使用して要素単位のべき乗を計算するときのパフォーマンスが向上しています。たとえば、次のコードでは、5000 行 5000 列の配列のすべての要素を 3 乗します。以前のリリースと比較して、このコードは約 3.8 倍速くなっています。
function t = timingPower x = rand(5000); y = @() x.^3; t = timeit(y); end
おおよその実行時間は以下のとおりです。
R2025b: 0.80 秒
R2026a: 0.21 秒
このコードの時間測定では、Windows® 11、AMD EPYC™ 74F3 24 コア プロセッサ (3.19 GHz) 搭載のテスト システムで、timingPower 関数を呼び出しました。
このパフォーマンスの向上はコードの変更によるものです。変更後のコードは倍精度の丸め動作も少し異なり、より正確な結果が得られます。たとえば、次のコードでは、小数点以下 15 桁の long 型科学表記法において、より正確な結果が返されるようになりました。
format longE
y = 0.4543.^3y =
9.376229100700000e-02以前は、同じコードで次の結果が返されていました。
format longE
y = 0.4543.^3y =
9.376229100699998e-020.4543 などの 10 進数の入力について、MATLAB では表現可能な最も近い倍精度 2 進数値に変換されることに注意してください。これは、元 の10 進数の入力と厳密に等しくなるとは限りません。そのため、.^ 演算子の倍精度の精度は向上していますが、オペランドの正確な表現を使用して実行された計算とは結果が異なることがあります。
指数で単項演算子または論理否定を伴うべき乗演算子のシーケンスを指定する場合は、小かっこを使用して演算の順序を明示的に指定することが必要になります。将来のリリースでは、^-、.^-、^+、.^+、^~、または .^~ を他のべき乗演算子と組み合わせた演算で小かっこを省略すると、エラーになる予定です。
たとえば、y = 4.^-3.^-2 などの演算の結果は、べき乗と否定が実行される順序に依存します。そのため、小かっこを使用して、意図する演算の順序を明示的に指定します。以下に例を示します。
y = (4.^(-3)).^(-2)
y =
4096y = 4.^(-(3.^(-2)))
y =
0.8572y = 4.^((-3).^(-2))
y =
1.1665power オペレーターでは、変数にアクセスするためにインデックス付けを行うことなく、table および timetable に対して直接演算を行うことがサポートされます。すべての変数のデータ型で演算がサポートされている必要があります。詳細については、table および timetable での直接計算を参照してください。
R2016b から暗黙的な拡張が追加されたことにより、それまで基本演算でエラーを返していた一部の引数の組み合わせで、結果が出力されるようになりました。たとえば、以前は行ベクトルと列ベクトルを加算できませんでしたが、それらのオペランドは現在、加算で有効になっています。つまり、[1 2] + [1; 2] のような式は、以前はサイズの不一致エラーを返していましたが、実行されるようになりました。
コードで要素単位の演算子を使用し、以前 MATLAB の返していたサイズの不一致エラーに依存している場合 (特に try/catch ブロック内)、コードは今後、これらのエラーをキャッチしなくなることがあります。
基本的な配列演算に必要な入力サイズの詳細については、基本的な演算で互換性のある配列サイズを参照してください。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)