Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python NumPyで異なる次元の2つの配列のクロネッカー積を求める方法

異なる次元を持つ2つの配列のクロネッカー積を計算するには、PythonのNumPyライブラリが提供するnumpy.kron()メソッドを使用します。クロネッカー積とは、第1の配列でスケーリングされた第2の配列のブロックから構成される複合配列のことです。

クロネッカー積の仕組み

この関数は、aとbの次元数が同じであることを前提としています。もし次元数が異なる場合は、必要に応じて次元数が小さい方の配列の先頭にサイズ1の軸を追加して揃えます。

a.shape = (r0, r1, ..., rN)、b.shape = (s0, s1, ..., sN) の場合、クロネッカー積の形状は (r0*s0, r1*s1, ..., rN*sN) となります。各要素はaとbの要素同士の積であり、以下のように明示的に配置されます。

# kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]

手順

1. ライブラリのインポート

まず、必要なライブラリをインポートします。

import numpy as np

2. 配列の作成

arange()メソッドとreshape()メソッドを使って、異なる次元を持つ2つのNumPy配列を作成します。

arr1 = np.arange(20).reshape((2,5,2))
arr2 = np.arange(6).reshape((2,3))

3. 配列の表示

作成した配列を表示して確認します。

print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

4. 次元数の確認

ndim属性を使って、両方の配列の次元数を確認します。

print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

5. 形状の確認

shape属性を使って、両方の配列の形状を確認します。

print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

6. クロネッカー積の計算

2つの配列のクロネッカー積を取得するには、numpy.kron()メソッドを使用します。

print("\nResult (Kronecker product)...\n",np.kron(arr1, arr2))

完全なコード例

import numpy as np

# arange()とreshape()を使って、異なる次元の2つのNumPy配列を作成
arr1 = np.arange(20).reshape((2,5,2))
arr2 = np.arange(6).reshape((2,3))

# 配列を表示
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

# 両方の配列の次元数を確認
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

# 両方の配列の形状を確認
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

# numpy.kron()メソッドでクロネッカー積を計算
print("\nResult (Kronecker product)...\n",np.kron(arr1, arr2))

出力結果

Array1...
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]]

[[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]]

Array2...
[[0 1 2]
[3 4 5]]

Dimensions of Array1...
3

Dimensions of Array2...
2

Shape of Array1...
(2, 5, 2)

Shape of Array2...
(2, 3)

Result (Kronecker product)...
[[[ 0 0 0 0 1 2]
[ 0 0 0 3 4 5]
[ 0 2 4 0 3 6]
[ 6 8 10 9 12 15]
[ 0 4 8 0 5 10]
[12 16 20 15 20 25]
[ 0 6 12 0 7 14]
[18 24 30 21 28 35]
[ 0 8 16 0 9 18]
[24 32 40 27 36 45]]

[[ 0 10 20 0 11 22]
[30 40 50 33 44 55]
[ 0 12 24 0 13 26]
[36 48 60 39 52 65]
[ 0 14 28 0 15 30]
[42 56 70 45 60 75]
[ 0 16 32 0 17 34]
[48 64 80 51 68 85]
[ 0 18 36 0 19 38]
[54 72 90 57 76 95]]]

このように、3次元配列(形状 (2, 5, 2))と2次元配列(形状 (2, 3))という異なる次元の配列でも、numpy.kron()メソッドを使えば自動的に次元が調整され、正しくクロネッカー積が計算されることがわかります。

  1. Python(NumPy)で4次元配列と3次元配列のクロネッカー積を計算する方法

    クロネッカー積(Kronecker Product)とは PythonのNumPyでは、numpy.kron()メソッドを使うことで、4次元配列と3次元配列のように次元数が異なる配列同士でもクロネッカー積を簡単に求めることができます。クロネッカー積とは、第1の配列の各要素によって第2の配列全体をスケーリングしたブロックから構成される複合配列のことです。 kron()関数は、引数aとbの次元数が同じであることを前提としており、次元数が異なる場合は、小さい方の配列の先頭にサイズ1の軸が自動的に追加されます。a.shape = (r0, r1, …, rN)、b.shape = (s0, s1, …

  2. Pythonで2つのリストの要素の積からk番目に大きい値を求めるプログラム

    整数を含む2つのリスト p と q が与えられたとします。この問題では、両リストの要素をすべて掛け合わせた積の中から、k番目に大きい値(インデックスは0から開始)を求めます。 たとえば、入力が p = [2, 5]、q = [6, 8]、k = 2 の場合、出力は 16 になります。 考えられる積は次の4つです。 2 × 6 = 12 2 × 8 = 16 5 × 6 = 30 5 × 8 = 40 これらを降順に並べると [40, 30, 16, 12] となるため、インデックス2の要素、すなわち求める答えは 16 です。 解法のアプローチ すべての組み合わせの積を計算してソートする方法も