1

最初の 2 つの配列と同じ行数と列数を持つ配列の len(A) 数を取得するために、配列 A の各行を別の配列 (B) のすべての行のそれぞれで乗算しようとしています。

何か助けはありますか?

pseudo-code
from numpy  import *
import numpy as np

def multipar():
    A = array( [ (0.1,0.5,0.2,0.2), (0.2,0.5,0.1,0.2), (0.7,0.1,0.1,0.1) ] )
    B = array( [ (1,2,3,4), (2,3,4,5), (3,4,5,6) ] )
    for i in len(A):
        average = A[i]*B
    print average

multipar() 

結果の新しい配列をそれぞれ取得したい

Array C
(0.1,0.5,0.2,0.2) * (1,2,3,4);
(0.1,0.5,0.2,0.2) * (2,3,4,5);
(...)
Array D
(0.2,0.5,0.1,0.2) * (1,2,3,4);
(...)
4

1 に答える 1

2

あなたはより高い次元で何か面白いことをすることができます。いずれかAまたはB3次元に拡張してから、拡張されなかったものを乗算します。例えば:

A = array( [ (0.1,0.5,0.2,0.2), (0.2,0.5,0.1,0.2), (0.7,0.1,0.1,0.1) ] )
B = array( [ (1,2,3,4), (2,3,4,5), (3,4,5,6) ] )

tiled = tile (B, (3,1,1)).swapaxes (0,1)
all_results = A*tiled

これで、すべての結果配列がall_results;に含まれます。all_results[0]all_results[1]などで簡単に入手できます

編集:最新の質問への回答編集:結果の配列を個別に本当に必要とする場合は、さらに2つのオプションがあります。

  • C, D, E = all_results
  • 私の最初の提案の最後の2つのステートメントを次のように置き換えます。

    C = B * A [0]

    D = B * A [1]

    E = B * A [2]

結果に個別の配列が本当に必要で、ループが必要になるようにさらに多くの行が必要な場合は、次のようにすることができます(@Jaimeのブロードキャスト表記に感謝します)

all_results = A[:, None, :] * B[None, :, :]
for i, res in enumerate (all_results):
    locals () ['result%d'%i] = res

これで、最初の行を乗算した結果は、と呼ばれる変数res1に、2番目の行はres2に、というようになります。

于 2013-03-14T19:57:12.867 に答える