gpt4 book ai didi

matlab - 通过减小最大向量的大小,使长度不等的向量的长度相等

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

我正在从 .txt 文件中读取 5 列到 5 个向量。

有时一些向量比其他向量大一个元素,所以我需要检查它们是否都等长,如果不是,我必须找到哪些是最大的并删除它们的最后一个元素。我想我应该能够在没有循环的情况下做到这一点。本来想用find结合 isequal但是 isequal仅返回逻辑值,不提供有关哪些向量最大的任何信息。

[Seconds,Sensor1VStatic,Sensor2VPulsed,TemperatureC,RelativeHumidity] = importfile(path);

然后根据哪些向量长一个元素,我会做,例如
Seconds(end) = [];
Sensor1VStatic(end) = [];

如果 Seconds 和 Sensor1VStatic 比其他向量长一个元素

最佳答案

假设您的向量位于元胞数组 A 中:

A = {[1 2 3], [1 2 3 4], [1 2 3 4 5]};

你可以得到每个向量的大小
sz = cellfun(@(x)size(x,2), A);

哪个会返回(对于上面的例子)
sz = [ 3 4 5]

现在你可以找到最短的向量:
minLength = min(sz);

最后,使所有向量都达到这个长度:
B = cell2mat(cellfun(@(x)x(1:minLength), A, 'uniformoutput', false))';

可能有更优雅的方式(并注意 cellfun 确实在做“隐式循环”)

将此应用到您的(现已扩展)示例中,您可能会分配 importfile 的输出直接到元胞数组 - 或者您可以将其作为单独的行进行:
A = {Seconds,Sensor1VStatic,Sensor2VPulsed,TemperatureC,RelativeHumidity};

但这一切都变成了很多工作。相反,你可以这样做:
minLength = min(size(Seconds,1), size(Sensor1VStatic,1), size(Sensor2VPulsed,1), ...

Seconds = Seconds(1:minLength);
...

有一些聪明的空间,但它不会使事情更具可读性,从长远来看也不会节省时间......

关于matlab - 通过减小最大向量的大小,使长度不等的向量的长度相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495772/

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