【问题标题】:Unable to perform assignment because the indices on the left side are not compatible with the size of the right side. What does this mean?无法执行分配,因为左侧的索引与右侧的大小不兼容。这是什么意思?
【发布时间】:2020-02-12 11:22:55
【问题描述】:

无法执行分配,因为左侧的索引与右侧的大小不兼容。这是什么意思?

错误 段(n_start)=data(n_start:(n_start+ window_size-1));

%% input data matrix
DDD=load('data2.mat');
data=DDD.data;
N_max=length(data);
window_size=256*3; %% 256 for 1 second ==> 3 seconds
step_win=128*3; %% overlapping window ...by 50%
segment=zeros(4798,768);
count=0;
for n_start = 1:step_win:(N_max-window_size)
    count=count+1;
    segment(n_start)=data(n_start:(n_start+ window_size-1));
end
plot(Segment)
xlabel('time')
grid on;
title('data of channel1');

【问题讨论】:

  • 你没有说 哪里 你得到了错误(总是包括整个错误消息),但我认为它在你正在尝试的地方分配 Segment(n_start)将 768 个元素的向量放入单个数组元素中。我不认为那是你想要做的。此外,您应该检查您的变量名称。您初始化segment,但分配Segment。这些不一样。
  • 我希望每次循环迭代时都填充数组segment=zeros(4798,768)

标签: arrays matlab for-loop matrix vector


【解决方案1】:

在段落中:

segment(n_start)=data(n_start:(n_start+ window_size-1));

您正试图将一个向量归因于一个 1x1 矩阵。

如果segment是一个向量,那么segment(n_start)是它在n_start位置的值,如果n_start是一个整数,那么segment(n_start)是1x1。

另一方面,n_start:(n_start+ window_size-1) 是一个向量,它从n_start 开始,并逐个增加直到(n_start+ window_size-1)。这要归功于 : 运算符的工作方式。因为window_size=256*3,那么它就是一个767长的向量。

当您调用data(n_start:(n_start+ window_size-1)) 时,您正在询问向量n_start:(n_start+ window_size-1) 中包含的索引中的所有数据值。

因此,在错误行中,您尝试将大小为 767x1 的向量归因于 1x1 矩阵。这就是它不起作用的原因。

【讨论】:

  • 好的,谢谢,我明白了。你有什么建议可以解决这个问题吗?我希望每次循环迭代时都填充数组 segment=zeros(4798,768) 。 4798是段数,768是每个段的元素个数
  • 我不清楚您想要什么,但请注意您可以制作:segment(n_start:(n_start+ window_size-1))=data(n_start:(n_start+ window_size-1));。这将覆盖之前写入的字段。你也可以考虑:segment(n_start:(n_start+ window_size-1))= segment(n_start:(n_start+ window_size-1)) + data(n_start:(n_start+ window_size-1));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多