Python中Matlab的'ismember'相当于什么?

时间:2010-09-29 18:37:49

标签: python matlab

我正在尝试使用相同的列数对两个矩阵A和B的行进行比较。

在matlab中,命令ismember(a, b, 'rows')返回一个包含1的向量,其中A的行也是B的行,否则为0,并且对于作为B的成员的A中的每个元素,还返回B中的最高索引。 。

[tf, index] = ismember(A, B, 'rows');

python中是否有等效函数?任何想法怎么做?

2 个答案:

答案 0 :(得分:4)

你可以把你的矢量作为

same_rows = [a == b for a,b in zip(A, B)]

请注意,这会产生TrueFalse而不是1和0,但boolintTrue == 1以及False == 0的子类

要获得发生这种情况的最大行,您可以使用

max_row = next(i for i, row in enumerate(reversed(same_rows)) if row == True)

如果您想要它们共有的行数,您可以使用

same_count == sum(same_rows)

请注意,这完全适用于python,并假设矩阵是列表或元组列表或列表或元组的元组。 HTH。

答案 1 :(得分:0)

ismember库可能会有所帮助。

pip install ismember

示例:

# Import library
from ismember import ismember

# Example with random matrices
a_vec = np.random.randint(0,10,(5,8))
b_vec = np.random.randint(0,10,(5,10))

# Row-wise comparison
Iloc, idx = ismember(a_vec, b_vec, 'rows')

# These should all be True
for i in np.arange(0,a_vec.shape[0]):
    np.all(a_vec[i,Iloc[i]]==b_vec[i,idx[i]])