Python:比较两个数组中相应行的长度

时间:2016-08-19 14:32:28

标签: python-3.x numpy

我有两个长度相等的数组,每行都是一个元组列表,我想比较相应行中元组列表的长度,然后剪掉较大的一个,使它与较小的长度相同。

大多数numpy比较函数处理元素明智的比较,但也许我错过了一些明显的东西。

到目前为止,我已经进行了两次尝试,当我使用for循环时,我只需要一对一的比较,就会生成两个数组之间的每个i / j组合。

在另一方面,我没有在我创建的空列表中附加任何内容。

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))

1 个答案:

答案 0 :(得分: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']]