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

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

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

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

Python

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

Q&A

解決済

1回答

1249閲覧

2つの一次元配列から内積のようにして二次元配列を作成したい.

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

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

Python

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

1グッド

1クリップ

投稿2020/05/22 02:38

前提・実現したいこと

添付画像のように,2つの一次元配列から,それらの内積を取ったような,リストを作成したいです.

イメージ説明

とても初歩的な質問のような気がするのですが,色々試したり,調べたりしましたが,うまくいきませんでした.

該当のソースコード

Python

1import numpy as np 2 3m1 = 'a' 4m2 = 'b' 5 6T1 = 'c' 7T2 = 'd' 8 9m = np.array([[m1], [m2]]) 10T = np.array([T1, T2]) 11 12print(m) 13print(T)

試したこと

リストの結合のキーワードでconcatenateやvstack,hstackが出てきたのですが,どれも該当しなさそうでした.

よろしくお願いします.

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

m が形状が (2, 1, 2) の配列、T が形状が (1, 2, 2) の配列、結果 C が形状 (2, 2) の配列としたとき、行いたい計算は以下なので、

イメージ説明

これは numpy.einsum("ija, jka->ik", m, T) で計算できます。

numpyにおける tensordotとeinsumの関係 - Qiita

python

1m1 = [1, 2] 2m2 = [2, 2] 3T1 = [3, 1] 4T2 = [4, 1] 5 6m = np.array([[m1], [m2]]) # (2, 1, 2) 7T = np.array([[T1, T2]]) # (1, 2, 2) 8 9print(m.shape) 10print(T.shape) 11 12# [[m1・T1, m1・T2], 13# [m2・T1, m2・T2]] 14C = np.einsum("ija, jka->ik", m, T) 15print(C)

追記

こういうことでしょうか?
numpy は数値計算ライブラリなので、数値計算でないなら、numpy は使えないと思います。

python

1m1 = [1, 2] 2m2 = [2, 2] 3T1 = [3, 1] 4T2 = [4, 1] 5 6m = [[m1], 7 [m2]] # (2, 1) 8T = [[T1, T2]] # (1, 2) 9 10m_row, m_col = len(m), len(m[0]) 11T_row, T_col = len(T), len(T[0]) 12 13C = [[[] for j in range(T_col)] for i in range(m_row)] 14 15for i in range(m_row): 16 for j in range(T_col): 17 for k in range(m_col): 18 C[i][j].append([m[i][k], T[k][j]]) 19 20print(C) 21# [ [ [[[1, 2], [3, 1]]], [[[1, 2], [4, 1]]] ], 22# [ [[[2, 2], [3, 1]]], [[[2, 2], [4, 1]]] ] ]

投稿2020/05/22 02:57

編集2020/05/22 03:32
tiitoi

総合スコア21956

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

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

退会済みユーザー

退会済みユーザー

2020/05/22 03:05

内積結果を計算するのではなく,ペアのリストを作りたいです.
tiitoi

2020/05/22 03:18

追記しました。
退会済みユーザー

退会済みユーザー

2020/05/22 03:23

ご丁寧にありがとうございます. 文字の所は数字でもよいのですが,内積を計算する前の段階で止めておいた数値のペアを作りたかったです. 文字の場合は追記されたもので回答になっていますが,数値の場合,他に速い計算方法などはあるのでしょうか?
tiitoi

2020/05/22 03:33

追記のコードを編集しました。 > 他に速い計算方法などはあるのでしょうか? numpy の stack() のような関数でやるのは難しいと思うので、追記のコードのように自分で書く必要があると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問