質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

942閲覧

Numpyで内積を計算した結果をもとに戻したい

taichi1602

総合スコア26

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/19 01:07

編集2020/11/19 09:08

配列xとwで内積を取った結果yを変換したzがあります。
このzとwを使ってもとのxに戻るようなプログラムを作成したいです。
よろしくお願いします。

import numpy as np

x =np.array([[0, 1, 4, 5],
[1, 2, 5, 6],
[2, 3, 6, 7],
[4, 5, 8, 9],
[5, 6, 9, 0],
[6, 7, 0, 1],
[8, 9, 2, 3],
[9, 0, 3, 4],
[0, 1, 4, 5],])
print(x)
w =np.array([[1],
[0],
[0],
[1]])
print(w.shape)
y = np.dot(x, w)

print(y)
z = y.reshape(1, 3, 3, -1).transpose(0, 3, 2, 1)
print(z)

この, zからyに戻す操作をnumpyで書くにはどのようにすればよいかと
y = np.dot(x, w)の逆を行う
yとwの内積の逆を計算する関数はあるのか教えていただきたいです。

やったこととして,
y_ = z.transpose(0,2,3,1).reshape(-1,1)
print(y_)

x_ = np.dot(y_,w_.T)
print(x_)

を行いましたが, x_はもとのxに戻りませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2020/11/19 03:24

質問のコードはエラーが出て実行できません。 実行可能なコードを記載してください
toast-uz

2020/11/19 03:34

質問設定が不自然なので、どういう背景があるのか教えていただきたいです。学校の課題でしょうか? また、そもそもコードに表す以前に、行列やベクトルの数学として解法を提示し、それをコードに落とす方法のみを聞くようにお願いします。
taichi1602

2020/11/19 04:11

プログラムを実行できるものに修正しました。 質問の背景としては, 配列xは画像を想定しており, それに対してwを画像フィルタとして 行列積をnp.dotで計算した後にzとして重みづけされたマップとして処理しているのですが, 画像を復元する際に, 上記の逆を行いたいく質問しました。
toast-uz

2020/11/19 12:11

再掲 「そもそもコードに表す以前に、行列やベクトルの数学として解法を提示し、それをコードに落とす方法のみを聞くようにお願いします。」
taichi1602

2020/11/19 13:04

質問内容がわかりにくくて申し訳ありません。 >コードに落とす方法のみ とのことですが、質問内容は、2つの配列(x,w)をnp.dot(x,w)で計算した結果yを用いてx=np.dot(y,w)のような形で再現できる方法を質問しています。 単にコードに落とし込む方法を聞いているわけではありません。
toast-uz

2020/11/19 14:33

数学的に不可能じゃないでしょうか、という意味の質問です。数学的に不可能か困難なことの解決策まで、この場に求めているのでしょうか?
taichi1602

2020/11/19 23:48

原理的に不可能なことなのですね。 コメントを理解できていませんでした。 丁寧に教えてくださりありがとうございました。 質問内容を変えて再度質問したいと思います。
ozwk

2020/11/19 23:53 編集

> 単にコードに落とし込む方法を聞いているわけではありません プログラムの質問をするサイトなので、数学が絡む場合は 数学的にどうすればできるかをご自身で確認した上で 「数学的にはこうすればできるが、それをプログラムに落とし込むにはどうすればいいかわからない」 というような質問をしてください (実際には数学の質問になっちゃってる質問も多いですし、それに回答がつくことも多いですが)
guest

回答1

0

ベストアンサー

単純な例を下記に載せます。
ここでx1, x2は異なるベクトルですが、wと内積をとったy1, y2は同じ値になります。
つまり、原理的に内積から元のベクトルを求めるのはできないということですね。

python3

1import numpy as np 2x1 = np.array([1,2]) 3x2 = np.array([1,3]) 4w = np.array([2,0]) 5y1 = np.dot(x1,w) 6print(y1) # -> 2 7y2 = np.dot(x2,w) 8print(y2) # -> 2

投稿2020/11/19 23:10

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問