gpt4 book ai didi

string - Matlab,根据第一个字符串对字符串单元进行排序

转载 作者:行者123 更新时间:2023-12-03 04:36:28 25 4
gpt4 key购买 nike

我有 2 个字符串单元格,我想根据第一个字符串对它们进行排序。

A = {'a';'b';'c'}
B = {'b';'a';'c'}

idx = [2,1,3] % TO FIND

B=B(idx);

我想找到一种方法来查找idx...

最佳答案

使用 ismember 的第二个输出。 ismember 告诉您第一组中的值是否位于第二组中的任何位置。如果我们发现任何东西,第二个输出会告诉您这些值所在的位置。因此:

A = {'a';'b';'c'}
B = {'b';'a';'c'}
[~,idx] = ismember(A, B);

请注意,声明元胞数组时存在一个小拼写错误。 bc 之间有一个冒号,分别表示 Aac对于B。为了正确起见,我在两者中都放置了一个分号。

因此,我们得到:

idx =

2
1
3
<小时/>

基准测试

我们这里有三种非常好的算法。因此,让我们通过基准测试来看看它的表现如何。我要做的是生成一个 10000 x 1 的小写字母随机字符数组。然后将其封装到 10000 x 1 元胞数组中,其中每个元胞都是一个字符数组。我用这种方式构造了A,而BA中元素的随机排列。这是我为我们执行此操作而编写的代码:

letters = char(97 + (0:25));
rng(123); %// Set seed for reproducibility
ind = randi(26, [10000, 1]);
lettersMat = letters(ind);
A = mat2cell(lettersMat, ones(10000,1), 1);
B = A(randperm(10000));

现在...这是测试代码:

clear all;
close all;

letters = char(97 + (0:25));
rng(123); %// Set seed for reproducibility
ind = randi(26, [10000, 1]);
lettersMat = letters(ind);
A = mat2cell(lettersMat, 1, ones(10000,1));
B = A(randperm(10000));

tic;
[~,idx] = ismember(A,B);
t = toc;

fprintf('ismember: %f\n', t);

clear idx; %// Make sure test is unbiased

tic;
[~,idx] = max(bsxfun(@eq,char(A),char(B)'));
t = toc;

fprintf('bsxfun: %f\n', t);

clear idx; %// Make sure test is unbiased

tic;
[~, indA] = sort(A);
[~, indB] = sort(B);
idx = indB(indA);
t = toc;

fprintf('sort: %f\n', t);

这是我得到的计时结果:

ismember: 0.058947
bsxfun: 0.110809
sort: 0.006054

Luis Mendo 的方法最快,其次是 ismember,最后是 bsxfun。对于代码紧凑性而言,ismember 是首选,但对于性能而言,sort 更好。就我个人而言,我认为 bsxfun 应该获胜,因为它是一个很好用的函数;)。

关于string - Matlab,根据第一个字符串对字符串单元进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com