以规定的顺序获取数组的子集

时间:2018-02-19 21:44:02

标签: arrays matlab sorting

我有一个主数组和一个查询数组: -

        batch_size=16
        words = 20000
        units = 50
        tokens_per_sentence= 55

        print (x.shape)

        x_shape =  x.shape

        model = Sequential()

        model.add(Embedding(words, units,input_length=tokens_per_sentence, batch_size=batch_size , input_shape=x_shape[1:]))

        model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

        model.train_on_batch(x, y)

查询数组的所有元素都将是主数组的成员。这是一条规则。我必须找到主数组规定的查询数组的所有元素的顺序。

我可以天真地做到这一点: -

master_array=[2;5;3;7;1];
query_array=[1;3];

是否有更有效的解决方案?

2 个答案:

答案 0 :(得分:2)

您可以使用intersect

order_array = intersect(master_array, query_array, 'stable');

或者您可以使用ismember

order_array = master_array(ismember(master_array, query_array));

答案 1 :(得分:1)

此解决方案在我的基准测试中花费的时间减少了近70%:

[~,idx] = ismember(master_array,query_array);
order_array = query_array(idx(idx > 0));

有关ismember函数的更多信息,请参阅Matlab官方文档的this page