hetare
@hetare

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ブロードキャストについてお教えください。

解決したいこと

python3のブロードキャストがいまいちわからないのでご説明いただけたら嬉しいです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
問題1
A+Bが計算できない組み合わせとして、正しいものを以下の中から選べ。

選択肢
A = np.array([[0,1,2]]) B = np.ones((3,1))

A = np.array([[0,1,2]]) B = np.ones((3,2))

A = np.array([[0,1,2]]) B = np.ones((1,3))

A = np.array([[0,1,2]]) B = np.ones((2,3))

正解
A = np.array([[0,1,2]]) B = np.ones((3,2))

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
問題2
以下のコードを実行した際の出力として正しいものを選べ

import numpy as np

a = np.array([[0,1,10],[0,1,10]])
b = a.copy()
a2 = a.reshape(3,2)
b*a2

選択肢
array([[ 20, 100], [ 20, 100]])

array([[ 0, 1, 10], [ 0, 10, 100], [ 0, 11, 110]])

エラーになり、計算は実行できない

np.array([0,1,10, 0,1,10])

正解
エラーになり、計算は実行できない
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

自分の理解

問題1は
A = np.array([[0,1,2]]) B = np.ones((3,1)) の選択肢がOKで
A = np.array([[0,1,2]]) B = np.ones((3,2))のほうがNGな理由がわかっていないです。
Aが1行3列、Bが3行1列なのと3行2列の場合、どちらのBも行と列の数のどちらかの数は合っていないのでできないと思ってしまうのですが…

問題2もなぜ計算できないのかがわかりません。

0

1Answer

2つの配列の各次元の長さを(後ろから)比較して、両者が等しいかどちらかが1であれば計算可能で、それ以外の場合は不可能です。

下の関数のようなイメージです。

def check(A, B):
    for a, b in zip(A.shape[::-1], B.shape[::-1]):
        if a == b or a == 1 or b == 1:
            continue
        else:
            return print(a, b, 'NG')
    return print('OK')

B = np.ones((3,1))の場合

>>> A = np.array([[0, 1, 2]])
>>> B = np.ones((3, 1))
>>> check(A, B)
OK

B = np.ones((3,2))の場合

>>> A = np.array([[0, 1, 2]])
>>> B = np.ones((3, 2))
>>> check(A, B)
3 2 NG
1Like

Comments

  1. @hetare

    Questioner

    理解できました!コードも使って丁寧にお教えいただきありがとうございます!
    助かりました。

Your answer might help someone💌