2017-05-18 20 views
1

cvxpyを使用して最適化の問題を解決しています。出力をmatrixとしてndarrayに保存したいと思います。NumPy行列をNumPy配列にコピー

これはテストケースの縮小です。 acvxpyの戻り値を表します。

import numpy as np 

z = np.zeros((3,7)) 
a = np.matrix("[1; 2; 3]") 
z[0, 0] = a[0] 
z[1, 0] = a[1] 
z[2, 0] = a[2] 

最後の3行をより良いものに置き換えたいのですが、試してみるとすべてエラーになります。たとえば、

>>> z[:, 0] = a 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
ValueError: could not broadcast input array from shape (3,1) into shape (3) 
>>> np.copyto(z[:, 0], a) 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
ValueError: could not broadcast input array from shape (3,1) into shape (3) 

少し助けていただければ幸いです。ありがとうございました。

一つの簡単な方法は、 zにインデックスを作成する列インデックスのリストを使用して、単純にそこnumpyの行列 aを割り当てることであろう

答えて

1

-

z[:,[0]] = a 

もう一つの方法は、マトリックスaの転置を用いることであろう、zに最初の列のスライスされたバージョンに割り当てる行ベクトルであると思われる -

z[:,0] = a.T 
+1

'a.A1'はここでうまくいくかもしれません。私。 2次元行列を1次元配列に変換します。 – hpaulj

+0

@hpauljあなたは '.A1'のことを大好きですね。 :) – Divakar

+0

@hpaulj私は 'a.A1'、そのような素晴らしい構文的な砂糖について知りませんでした:P –