Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Matlab是一种在单元格数组中搜索字符串的更有效的解决方案_Regex_Arrays_String_Matlab - Fatal编程技术网

Regex Matlab是一种在单元格数组中搜索字符串的更有效的解决方案

Regex Matlab是一种在单元格数组中搜索字符串的更有效的解决方案,regex,arrays,string,matlab,Regex,Arrays,String,Matlab,我想在字符串a(300.000 x 7)的单元格数组的两列中搜索字符串向量 代码如下: y=arrayfun(@(x)~cellfun(@isempty,regexp(A(:,3:4),string(x))),1:numel(string),'uni',false); y=cat(1,y{:}); 这个问题类似于和这个问题 然而,这个解决方案需要几个小时。有人知道执行相同操作的更有效方法吗?您正在将字符串与双精度数组进行比较(“字符串”是双精度数组);这就是你想做的吗?如果没有,您可以使用s

我想在字符串a(300.000 x 7)的单元格数组的两列中搜索字符串向量

代码如下:

y=arrayfun(@(x)~cellfun(@isempty,regexp(A(:,3:4),string(x))),1:numel(string),'uni',false);

y=cat(1,y{:});
这个问题类似于和这个问题


然而,这个解决方案需要几个小时。有人知道执行相同操作的更有效方法吗?

您正在将字符串与双精度数组进行比较(“字符串”是双精度数组);这就是你想做的吗?如果没有,您可以使用
string\u chars=arrayfun(@(x)sprintf('%d',string(x)),1:length(string),'uni',false)

要避免使用regexp,可以使用strcmp:

result = zeros(size(A(:,3:4)));
for v=1:length(string_chars)
    result=result+v.*strcmp(A(:,3:4),string_chars(x)); % Should string be a cell here, btw?
end

我不知道我在这里添加的结果是否适合您的使用,但您可以根据需要进行调整。这将设置结果元素,使其对应于
string\u chars

的每个元素,因为这里没有字符串向量。哦,用
cellfun(@isempty,…)代替
cellfun(@isempty,…)
。它应该跑得快得多。谢谢你,但它还是很慢。如果目标是提高速度,请避免Matlab的速度慢得可怜的正则表达式实现,特别是对于这样的简单比较。当然,对于
循环,永远不要害怕
result = zeros(size(A(:,3:4)));
for v=1:length(string_chars)
    result=result+v.*strcmp(A(:,3:4),string_chars(x)); % Should string be a cell here, btw?
end