我正在尝试使用相同的列数对两个矩阵A和B的行进行比较。
在matlab中,命令ismember(a, b, 'rows')
返回一个包含1的向量,其中A的行也是B的行,否则为0,并且对于作为B的成员的A中的每个元素,还返回B中的最高索引。 。
[tf, index] = ismember(A, B, 'rows');
python中是否有等效函数?任何想法怎么做?
答案 0 :(得分:4)
你可以把你的矢量作为
same_rows = [a == b for a,b in zip(A, B)]
请注意,这会产生True
和False
而不是1和0,但bool
是int
和True == 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]])