私は2つのNumpy配列x
の形状が(m, i)
とy
で、形が(m, j)
であるため(行数が同じです) x
の各列にの各列を要素ごとに掛けて、結果が形が(m, i*j)
になるようにしたいと思います。2D配列の各列と別の2D配列の各列を掛け合わせます
例:
array([[1, 1, 0],
[0, 1, 1],
[1, 1, 1],
[0, 0, 1],
[0, 1, 1],
[0, 0, 1],
[0, 0, 0],
[1, 0, 0],
[1, 0, 0],
[0, 1, 0]])
とy
:
import numpy as np
np.random.seed(1)
x = np.random.randint(0, 2, (10, 3))
y = np.random.randint(0, 2, (10, 2))
これは、次の2つのアレイx
作成
array([[0, 0],
[1, 1],
[1, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 1],
[1, 1],
[0, 1],
[1, 0]])
を今結果がなければならない:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0]])
現在、私はx
とy
の列にわたって2つのネストされたループでこの操作を実装しました。しかし
def _mult(x, y):
r = []
for xc in x.T:
for yc in y.T:
r.append(xc * yc)
return np.array(r).T
、私はもっとエレガントな解決策が存在しなければならないことをかなり確信している私ができます思いつかないようだ。
"複雑な"ハックですが、非常に簡潔です! +1 –
ここに説明を追加できますか?簡潔ですが説明はできません。 – kmario23
@ kmario23いくつかの説明が追加されました。 – Divakar