2016-08-19 10 views
0

に対応する行の長さを比較すると、各行のタプルのリストであり、Iは、対応する行のタプルのリストの長さを比較し、そのように大きい方をスニップしますそれはより小さいと同じ長さであること。パイソン:私は等しい長さの2つの配列を有する2つのアレイ

多分私は何かを明らかに欠けているもののnumpyの比較関数のほとんどは、要素ごとの比較を扱います。

これまでのところ、私はforループを使用したとき、私は唯一の1対1の比較をしたいとき、私は2つのアレイ間のすべてのI/Jの組み合わせを生成し、2回の試行を行いました。

は、他では私が作成した空のリストに追加何かを得ることはありません。

if len(i) in slice_ary1 == len(j) in slice_ary2: 
    mat_ary1.append(i) 
    mat_ary2.append(j) 
elif len(i) in slice_ary1 != len(j) in slice_ary2: 
    diff_r = abs(len(i) - len(j)) 
    max_l = max(len(i), len(j)) 
    max_i = max((i,j), key=len) 
    min_i = min((i,j), key=len) 
    row_norm = max_l - diff_r 
    mat_ary1.append(max_i[0:(row_norm)]) 
    mat_ary2.append(min_i) 

for i in slice_ary1: 
    for j in slice_ary2: 
     #print(len(i), len(j)) 
     if len(i) == len(j): 
      matrix_1 = np.array(i) 
      matrix_2 = np.array(j) 
      #print(matrix_1,len(matrix_2)) 
      # create matrix for i and j 
     elif len(i) != len(j): 
      diff_r = abs(len(i) - len(j)) 
      max_l = max(len(i), len(j)) 
      max_i = max((i,j), key=len) 
      min_i = min((i,j), key=len) 
      row_norm = max_l - diff_r 
      matrix_1 = np.array(max_i[0:(row_norm)]) 
      matrix_2 = np.array(min_i) 
      print(matrix_1,len(matrix_2)) 
+0

これはリストだけの問題です。異なるサイズの要素を持つ配列はオブジェクトdtypeであり、リストと同じ反復メソッドが必要です。 – hpaulj

答えて

1

正しく理解しているかどうかわかりません。これは、あなたの望むことですか?

import numpy as np 

# Just an example 
slice_ary1 = np.array([[1, 2, 3], [1, 2], [1, 2, 3, 4], [1]]) 
slice_ary2 = np.array([['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b']]) 

# Store the common length of your initial arrays 
n = slice_ary1.shape[0] 
# Create empty arrays for the output 
mat_ary1 = np.empty(n, dtype=object) 
mat_ary2 = np.empty(n, dtype=object) 

# Loop over rows 
for i in range(n): 
    # Compute the smallest length of the lists in each row 
    l = min(len(slice_ary1[i]), len(slice_ary2[i])) 
    # Copy the first `l` elements of each list to the output arrays 
    mat_ary1[i] = slice_ary1[i][:l] 
    mat_ary2[i] = slice_ary2[i][:l] 

print(mat_ary1) # => [[1, 2] [1, 2] [1, 2, 3] [1]] 
print(mat_ary2) # => [['a', 'b'] ['a', 'b'] ['a', 'b', 'c'] ['a']] 
+0

@Alberto Garcia-Rabosoに感謝します。私はそれを実装し、私が探していた結果を得ました。 – vanoccupanther

関連する問題