2017-12-04 10 views
1

基本的に多次元配列をとり、配列の3番目の列が1番目と2番目の列の斜辺であるかどうかを確認します。これはこれまでのコードです。私は、何が起こっているのかをより良く理解するために、コメントにいくつかの要素を追加しました。特定の条件を満たす多次元配列のSUBSETを返しますか?

import numpy 
import random 

def triple(mm): 
    mm=np.asanyarray(mm) # I think this is how we specify that the paremeter should be an array, however, 
    # it's possible the parameter isn't just mm, it could be 'j', 'qw', 'mm1', whatever. I'm not sure 
    # how to work that while specifying the parameter must be array. 
assert mm.ndim == 2 # we want mm or w/e the name of the parameter to be a 1 multidimensional array 
assert mm.shape[1] == 3 # we want 3 columns, with any number of rows 
    x = mm[:,0] 
    y = mm[:,1] 
    z = mm[:,2] # 3rd column is to be checked to see if its's the hypotenuse of 1st & 2nd columns 
    zz = np.hypot(x,y) 
    condition = np.any(z) == np.any(zz) 
    return np.array([condition, mm]) # I'm not sure how to specify it here, that we want the function to return a subset 
     # of the original multi-dim array, where the 3rd column is in fact the hypotenuse of the first and 
     # second columns. And we want to exclude the rows that don't satisfy this condition. 

そして、私は確認したいと思います。その '条件' は、私が設定している場合、私はわからない

ValueError: setting an array element with a sequence. 

mm = np.array([[5,5,5],[5,12,13],[3,4,5],[5,11,21],[8,15,17]]) 
triple(mm) 

をしかし、私は取得しています誤りがありますこれについては正しい方法でもありますので、誰かが正しい方向に私を助けてくれるのですか? 詳細についてはお気軽にお問い合わせください。

答えて

1

それを行うためのベクトル化方法は、次のとおりです。

この計算x²+y²-z²各行(axis=1)

In [1]: goods=(mm*mm*[1,1,-1]).sum(axis=1)==0 


In [2]: goods 
Out[2]: array([False, True, True, False, True], dtype=bool) 

そしてboolean indexingと上:

In [3]: mm[goods] 
Out[3]: 
array([[ 5, 12, 13], 
     [ 3, 4, 5], 
     [ 8, 15, 17]]) 

あなたの状態は良くありません:np.any(z) == np.any(zz)が真でありますzzzがヌルベクトルでない場合

np.array([condition, mm])ここにはnp.array ([ True, [[5....]] ])があり、エラーメッセージが表示されます。

+0

しかし、私が望むのは、条件が満たされている行を返す出力です(基本的にすべてのピタゴラスのトリプルを返します)。したがって、それは次のようになります: 'array([[5,12,13]、[3,4,5]、[8,15,17]])' – zainy

+0

編集されました。ブールインデックスを使用します。 –

+0

さて、それは動作しますが、私は物品がどのように動作しているかを実際に理解していませんか?それの論理のように... – zainy

関連する問題