我有两个长度相等的数组,每行都是一个元组列表,我想比较相应行中元组列表的长度,然后剪掉较大的一个,使它与较小的长度相同。
大多数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))
答案 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']]