畳み込み計算機
一方の数列をもう一方の上でずらしながら、重なった値を掛けて足し合わせます。[1, 2, 3] と [0.5, 0.5] の畳み込みは [0.5, 1.5, 2.5, 1.5] です。結果の長さは n + m − 1 で、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 1つ目のテキスト
- 1, 2, 3
- 2つ目のテキスト
- 0.5, 0.5
- a の長さ
- 3
- b の長さ
- 2
- 長さ
- 4
- 配列
- 0.5, 1.5, 2.5, 1.5
離散畳み込みは、信号処理と応用数学の基本演算です。有限の数列をもう一方の数列の上で滑らせ、各重なり位置で整列した値どうしを掛けて積を合計します。長さnの数列aと長さmの数列bが与えられると、この計算機は両者の完全な線形畳み込み、すなわち長さn+m-1の新しい数列を返します。そのk番目の値は、i+j=kを満たすすべての添字の組についてa[i]×b[j]を合計したものです。これはFIRフィルタリング、移動平均、多項式の乗算、独立なサイコロの和の確率分布の背後にある計算と同じものです。両方の数列に少なくとも1つの値が必要で、すべての値が有限数でなければなりません。空の数列やNaN・Infinityのような非有限の要素は、明確な検証エラーで拒否されます。
離散畳み込みの意味と計算方法
畳み込みが答えるのは単純な問いです。一方の数列を反転させてもう一方の上で滑らせ、各整列位置で重なったペアを掛けて積を合計したとき、各位置で読み取れる数は何か、という問いです。形式的には、長さnの数列aと長さmの数列bに対し、畳み込みc=a*bとは長さn+m-1の数列で、c[k]は有効なすべてのiについてa[i]×b[k-i]の和として定義されます。
具体例で実感できます。[1, 2, 3]と[0.5, 0.5]の畳み込みは[0.5, 1.5, 2.5, 1.5]になります。各出力標本が入力標本とその隣との平均になり、両端では重みが半分になるからです。
このツールが返す「完全」モードは、両端の一点だけが触れる位置を含め、すべての部分的な重なりを保持します。ここで使う直接アルゴリズムはn×m回の乗算・累積ステップを実行し、教育・フィルタ設計・データ分析で使われる数列では一瞬で終わります。
畳み込みは交換法則を満たすのでa*b=b*aが成り立ち、結合法則も満たすため、連鎖した平滑化は結果を変えずに並べ替えられます。また加法に対して分配的であり、これが線形システム理論が畳み込みに大きく依拠する理由です。
入力、制限、検証ルール
値は整数・小数・負数のいずれでもよく、1.5e-3のような指数表記の数値文字列も安全に変換されます。2つの厳格なルールが契約を守ります。第一に、どちらの数列も空にはできません。
長さゼロの入力には畳み込みが存在しないため、ゼロインパルスとして黙って扱うのではなく拒否します。第二に、すべての要素が有限数でなければなりません。各数列は4096要素までに制限されており、直接法のO(n·m)ループを計算予算内に十分収めつつ、現実的な教育・工学用途をすべてカバーします。
畳み込みが実際に使われる場面
畳み込みは、その名前が示唆するよりはるかに多くの場面に現れます。ディジタル信号処理では、有限インパルス応答フィルタを適用する方法が畳み込みです。カーネルbがタップ重みを保持し、出力がフィルタ済み信号になるため、幅3の移動平均は[1/3, 1/3, 1/3]との畳み込みにほかなりません。
確率論では、独立な2つの離散確率変数の和の分布はそれぞれの確率質量関数の畳み込みであり、1つのサイコロの一様分布を自分自身と畳み込むと、よく知られた2つのサイコロの三角分布が得られます。代数では、2つの多項式の乗算はまさに係数リストの畳み込みであり、このツールは記号計算の宿題の高速チェッカーになります。
画像処理では、分離可能な2次元カーネルは2つの1次元畳み込みの連続として適用されます。オーディオのエコーやリバーブでさえ、実際の部屋で録音されたインパルス応答との畳み込みです。システムの出力が入力のシフト・スケールされた重ね合わせであるあらゆる場所で、畳み込みがそれを記述する演算です。
活用例
サンプリング信号へのFIRフィルタの適用
標本を数列a、フィルタのタップ重みを数列bとして入力すると、フィルタ済みの出力が得られます。[0.25, 0.5, 0.25]のような平滑化カーネルは、信号処理ライブラリなしで高周波ノイズを除去します。
サイコロの和の分布
公正なサイコロ1個の確率質量関数を自分自身と畳み込むと、サイコロ2個の和の正確な確率が得られ、さらに畳み込めば3個の場合も求まります。各ステップは有限で検証可能な数値による1回の呼び出しです。
手計算の検証による多項式の乗算
多項式の乗算は係数リストの畳み込みなので、両方の因数の係数を入力し、出力された数列を自分の記号展開と比較すれば、符号や位置合わせの誤りを即座に発見できます。
よくある質問
畳み込み後の数列の長さはどうなりますか?
数列aがn個、数列bがm個の値を持つ場合、完全な畳み込みはn+m-1個の値を持ちます。
2つの数列の順序は関係ありますか?
いいえ。 畳み込みは交換可能です。慣例的に、長い信号をaに、短いカーネルをbに入れます。
入力が拒否されたのはなぜですか?
厳格なルールは2つです。どちらの数列も空にできないこと、すべての要素が有限数であることです。
巡回畳み込みですか、それとも線形畳み込みですか?
このツールは両端をゼロ埋めした完全な線形畳み込みを計算します。直接総和と同じ結果です。巡回(周期的)畳み込みのように数列を折り返すことはありません。
畳み込みはどんな場面で使われますか?
移動平均やデジタルフィルタ、多項式の掛け算、独立したサイコロの目の合計の確率分布などで使われます。どれも、ずらして掛けて足すという同じ計算です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/convolution \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":[1,2,3],"b":[0.5,0.5]}'const res = await fetch("https://api.kit.forhosting.com/math/convolution", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": [
1,
2,
3
],
"b": [
0.5,
0.5
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/convolution",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": [
1,
2,
3
],
"b": [
0.5,
0.5
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/convolution", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":[1,2,3],"b":[0.5,0.5]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":[1,2,3],"b":[0.5,0.5]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/convolution", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"a": [
1,
2,
3
],
"b": [
0.5,
0.5
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.convolution",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 4096 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
無料のブラウザツールと有料APIは同一の純粋関数を実行するため、チャネル間で結果が食い違うことはありません。
入力、制限、検証ルール
この計算機はaとbの2つのフィールドを受け付け、それぞれが空でない数値の配列です。NaN、Infinity、および累積中に非有限の結果へオーバーフローする値は、該当するフィールドと添字を明示したメッセージで拒否されます。出力オブジェクトはlength_a、length_b、出力長、そして畳み込み結果の数列そのものをキーsequenceの下に報告するため、スクリプトは再計算せずにサイズを検証できます。
畳み込みが実際に使われる場面
API経路は1リクエスト$0.002ですが、ブラウザツールは同じ数学を無料で実行します。
技術的な質問
サイズ制限はありますか?
各数列は最大4096個の有限数を含められます。直接アルゴリズムはn×m回の乗算・累積ステップを実行し、このサイズではブラウザでもAPIでも一瞬で完了します。
APIの料金はいくらですか?
ブラウザの計算機は無料で無制限です。同じ機能をAPI経由で呼び出す場合は1リクエスト$0.002です。どちらのチャネルも同一の決定的関数を実行します。