41337


numpy配列の内積を取るときにエラーが出てしまいます  
mat型のときはnp.dotが使えるというような文をどこかで見たので  
np.matをしてみましたがndarrayから変わっておらず意味が分かりません  
1行784列と784行392列の行列の積を計算したいです

[code]

    print type(data)
    data = list(data)
    data[1] = list(data[1])
    print type(data[1][0])
    data[1][0][k] = np.mat(data[1][0][k])
    print type(data[1][0][k])
    print data[1][0][k].shape
    print type(R)
    print R.shape
    data[1][0][k] = np.dot(data[1][0][k] , R)
    
    <type 'tuple'>
    <type 'numpy.ndarray'>
    <type 'numpy.ndarray'>
    (784,)
    <class 'numpy.matrixlib.defmatrix.matrix'>
    (784, 392)
    Traceback (most recent call last):
    File "hoge.py", line 268, in <module>
    data[1][0][k] = np.dot(data[1][0][k] , R)
    ValueError: could not broadcast input array from shape (392) into shape (784)
    
[/code]

また、

[code]

    data[1][0][k] = np.dot(np.transpose(data[1][0][k]) , R)
    
[/code]

をしてみたところ、

[code]

    ValueError: operands could not be broadcast together with shapes (1,784) (784,392)
    
[/code]

と出てしまいます


CC BY-SA 3.0
2018-01-30T20:03:57.327
41336
2018-01-31T00:34:23.990
27212
question
python
python numpyのブロードキャストとは？

[code]

    data[1][0][k] = np.dot(data[1][0][k] , R)
    
[/code]

の部分を

[code]

    print(np.dot(data[1][0][k], R).shape)
    
[/code]

とか

[code]

    print(np.dot(data[1][0][k], R).shape)
    
[/code]

してみてください。行列積計算は問題ないことが確認できると思います。

1行784列と784行392列の行列の積は1行392列の行列になりますね。それを`data[1][0][k] =
〜`として、784要素のndarrayにセットしようとして失敗してます。  
代入先の変数名を間違えているとかそういったことじゃないでしょうか。


CC BY-SA 3.0
2018-01-31T00:34:23.990
41337
2018-01-31T00:34:23.990
12274
41336
answer