matlab过滤数组中非零
时间: 2023-05-03 12:07:10 浏览: 164
在Matlab中,去掉数组中所有的非零项可以使用“find”函数。该函数返回矩阵中非零元素的索引,通过将这些索引传递给数组,就可以得到一个只包含零的新数组。
例如,对于一个包含非零元素的数组a,可以使用以下代码过滤出只有零元素的新数组b:
idx = find(a);
b = zeros(size(a));
b(idx) = 1;
该代码中,首先使用“find”函数获取非零元素的索引,并将其存储在“idx”中。接着,创建一个与a相同大小的全零新数组“b”。最后,将在“idx”中找到的非零元素的索引对应的元素置为1,就可以得到只包含零的新数组“b”。
值得注意的是,如果原数组a中只有少量非零元素,可以使用“logical”类型来创建新数组b,这样可以减少内存的使用。
例如,对于一个包含非零元素的数组a,可以使用以下代码过滤出只有零元素的新数组b:
b = zeros(size(a));
b(a~=0) = 1;
该代码中,使用“a~=0”来创建一个“logical”类型的数组,其中非零元素的位置为true,其余位置为false。将这个逻辑数组与一个全零的数组相乘,就可以得到一个只包含零的新数组“b”。这种方法不需要额外的内存空间,因此在处理大型数组时可以提高代码的效率。
相关问题
matlab 如何读取txt文件中非数字的内容
在MATLAB中,如果你想要读取.txt文本文件中的非数字内容,通常可以使用`textread`函数配合正则表达式来实现。`textread`函数主要用于从文本文件中读取数据到数组中,而正则表达式可以帮助我们过滤出非数字的部分。
以下是步骤:
1. 首先,你需要打开并读取整个文本文件的数据,可以使用`textscan`或`fileread`函数:
```matlab
fileContent = fileread('your_file.txt');
```
2. 然后,使用正则表达式找到所有非数字字符。你可以使用`regexp`函数配合`cellfun`来找出匹配的部分,并存储在cell数组中:
```matlab
regexPattern = '\D'; % 匹配非数字字符
matches = cellstr(regexp(fileContent, regexPattern, 'match'));
```
3. `matches`变量现在是一个包含文件中所有非数字字符串的cell数组。
如果需要处理每一行的数据,你可以将上述步骤封装在一个循环里,遍历每行文件内容。
```matlab
fid = fopen('your_file.txt', 'r'); % 打开文件
lines = textscan(fid, '%s', 'Delimiter', '\n'); % 按行读取
fclose(fid);
nonNumericLines = {};
for i = 1:numel(lines{1})
line = lines{1}{i};
nonNumericLine = regexp(line, regexPattern, 'match');
nonNumericLines{i} = nonNumericLine;
end
```
阅读全文
相关推荐

















