内存不足。 出错 sortrows (第 70 行) B = matlab.internal.math.sortrowsHelper(A, col, nanflag, compareflag); 出错 compareFun (第 110 行) e1 = sortrows(E,1);
时间: 2024-04-21 13:24:00 浏览: 127
这个错误信息表明在执行 sortrows 函数时出现了内存不足的问题。sortrows 是一个用于对矩阵按指定列进行排序的函数。在执行过程中,它可能会使用大量的内存来完成排序操作。当系统内存不足时,就会出现这个错误。
解决这个问题的方法有几种:
1. 增加系统的物理内存:如果你的计算机有可扩展的内存插槽,可以考虑添加更多的内存条来增加系统的物理内存。
2. 优化代码:检查你的代码,看看是否有其他地方占用了太多的内存。可能存在一些不必要的变量或操作,可以通过优化代码来减少内存的使用。
3. 分批处理数据:如果你需要对大型数据集进行排序,可以考虑将数据分成多个较小的批次,然后分别进行排序操作。这样可以减少每次排序时所需的内存量。
4. 使用更高效的排序算法:sortrows 函数使用的是一种通用的排序算法,但可能不是最高效的算法。你可以尝试使用其他更适合你的数据集和内存限制的排序算法来替代 sortrows 函数。
希望以上方法对你有所帮助!如果还有其他问题,请随时提问。
相关问题
转成matlab: knn_indexes = numpy.argsort(dist_mat_criteria, axis=1, kind='quicksort')
在 MATLAB 中,你可以使用 `sortrows` 函数来实现类似的功能。下面是将上述代码转换为 MATLAB 语法的方式:
```matlab
[~, knn_indexes] = sort(dist_mat_criteria, 2, 'ascend');
```
在 MATLAB 中,`sort` 函数会返回排序后的值和索引,但我们只对索引感兴趣,因此使用 `~` 忽略了排序后的值。第一个参数是要排序的矩阵 `dist_mat_criteria`,第二个参数 `2` 表示按行进行排序,最后一个参数 `'ascend'` 表示按升序进行排序。
请注意,MATLAB 中的索引从 `1` 开始,而不是从 `0` 开始,所以结果可能与 Python 中有所不同。
function crow_distance = crowding_distance(asset_ratios, F) [m, n] = size(F); for i = 1 : m f = F(i,:); [~, idx] = sortrows(asset_ratios(f,:), f); asset_ratios(f(idx(1))).crowding_distance = Inf; asset_ratios(f(idx(end))).crowding_distance = Inf; for j = 2 : n-1 asset_ratios(f(idx(j))).crowding_distance = ... asset_ratios(f(idx(j))).crowding_distance ... + (asset_ratios(f(idx(j+1))).obj - asset_ratios(f(idx(j-1))).obj)/... (max(asset_ratios(f).obj) - min(asset_ratios(f).obj)); end end这段代码报错:无法将类型为 cell 的值用作索引。 出错 crowding_distance (第 5 行) [~, idx] = sortrows(asset_ratios(f,:), f);如何修改
这个错误是因为 `sortrows` 函数第一个输入参数 `asset_ratios(f,:)` 返回的是一个单元格数组,而不是一个数值数组,无法直接用于索引操作。你需要使用花括号 `{}` 来提取其中的值,例如 `asset_ratios{f,:}`。
下面是修改后的代码:
```
function crow_distance = crowding_distance(asset_ratios, F)
[m, n] = size(F);
for i = 1 : m
f = F(i,:);
[~, idx] = sortrows(asset_ratios{f,:}, f);
asset_ratios{f(idx(1))}.crowding_distance = Inf;
asset_ratios{f(idx(end))}.crowding_distance = Inf;
for j = 2 : n-1
asset_ratios{f(idx(j))}.crowding_distance = ...
asset_ratios{f(idx(j))}.crowding_distance ...
+ (asset_ratios{f(idx(j+1))}.obj - asset_ratios{f(idx(j-1))}.obj)/...
(max([asset_ratios{f,:}].obj) - min([asset_ratios{f,:}].obj));
end
end
end
```
阅读全文