使用函数 eval( )+ 函数 find()
Use function eval( )+ function find()
%%%%%%%%%%%%% 2 - 旧 %%%%%%%%%%%%%%%%%%%
我按照建议修改了代码以提高效率。我在代码中有新的错误,不是访问元胞数组的专家
for i = first:N_Files
mat{i} = load(files(i).name);
A{i} = mat{1,i};
x{i} = A{:,i};
ind{i} = find(x{i}>= -0.5 & x{i}<=0.5);
% New error
B{i} = A{ind{i,:},:}; **Index exceeds matrix dimensions.**
xx{i} = B(:,1);
end
%%%%%%%%%%%%% 1 - 旧 %%%%%%%%%%%%%%%%%%%
我写了一个例程来访问放在不同文件夹中的文件。
然后使用以下例程构建一个存储文件数据的元胞数组:
for i = first:N_Files
mat{i} = load(files(i).name); % 1x3 cell
eval(['A' num2str(i) '= mat{1,i} ;']) % A1,A2,A3 dim : 114336x6 double
end
A = {A1, A2, A3}; cell array 1x3
我在访问一些在计算矩阵单元格时创建的向量时遇到问题。
for i = first:N_Files
eval(['x' num2str(i) '= A{:,i} ;']) % create x1, x2, x3
% incorrect code
eval(['ind' num2str(i) '= find('x' num2str(i) >= -0.5 & 'x' num2str(i)
<=0.5) ;'])
end
% need this indexing solution
ind1 = find(x1>= -0.5 & x1<=0.5);
ind2 = find(x2>= -0.5 & x2<=0.5);
ind3 = find(x3>= -0.5 & x3<=0.5);
我需要有 eval 函数和 find 函数,
这是可能的?
有有用的解决办法吗?
谢谢
%%%%%%%%%%%%% 完整代码 %%%%%%
这是我必须得到的代码。
for i = first:N_Files
A{i} = load(files(i).name); % 1x3 cell
x = A{:,1};
ind{i} = find(x(:,1)>= -0.5 & x(:,1)<=0.5); % This looks cleaner
B{i} = A{i}(ind{i},:); % Correct,first access element i in A then filter.
xx{i} = B{i}(:,1); %1x3 cell **what i really wanted**
yy{i} = B{i}(:,2);
zz{i} = B{i}(:,3);
u{i} = B{i}(:,4); % vettore velocità
v{i} = B{i}(:,5);
w{i} = B{i}(:,6);
c1{i} = [-0.5:0.01:0.5];
c2{i} = [0:0.01:2] ;
[X{i},Z{i}] = meshgrid(c1{i},c2{i});
U{i} = griddata(xx{i},zz{i},u{i},X{i},Z{i});
U{i}(isnan(U{i}))=0; % interpolazione ai bordi
W{i} = griddata(xx{i},zz{i},w{i},X{i},Z{i});
W{i}(isnan(W{i}))=0;
figure
pcolor(X{i},Z{i},(U{i}.^2+W{i}.^2).^0.5);
shading(gca,'interp')
title('Velocità')
colorbar;
axis square
hh = streamslice(X{i},Z{i},U{i},W{i});
set(hh,'color','k');
end
好的,我会尽力帮助你。首先,如果你有一个维度为 1xN 的单元格,你只需要一个索引:A{i} = mat{i}
。但是,您随后会看到 A==mat
,这意味着两者都不需要。在下一行中,您执行 x{i} = A{:,i}
,这似乎与您在前一行中所做的相同 => x==mat
。这意味着我们可以删除两行。那么我猜你的目标是为每个文件找到绝对值小于 0.5 的索引并将每个索引存储在一个单元格中,对吗?然后是错误:通过执行 A{ind{i,:},:}
,您实际上是在子引用 A
本身,而不是 A
的每个元素。 A
的大小为 1*n 个文件。你要做的确实是这样的:B{i} = A{i}(ind{i})
.
因此,如果这不是您想要的,请发表评论。否则,删除冗余变量。 并确保您没有混淆单元格和矩阵。您使用单元格作为数组的容器:a{n} 指的是单元格元素 n 中的数组,a{n}(m) 指的是位于单元格元素 n 中的数组中的矩阵元素 m。 好运气!
for i = first:N_Files
mat{i} = load(files(i).name);
%A{i} = mat{1,i}; % not needed mat==x
%x{i} = A{:,i}; % not needed x==A
x = mat; % Fix this later, I do not want to change any variable names.
% ind{i} = find(x{i}>= -0.5 & x{i}<=0.5);
ind{i} = find(abs(x{i})<=0.5); % This looks cleaner
%B{i} = A{ind{i,:},:}; **Index exceeds matrix dimensions.**
B{i} = A{i}(ind{i}); % Correct,first access element i in A then filter.
xx{i} = B(:,1); %I do not know what you tries to do but probably
%xx{i}=B{i} => x==B so one variable is redundant.
end
%%%%%%%%%%%%% 2 - 旧 %%%%%%%%%%%%%%%%%%%
我按照建议修改了代码以提高效率。我在代码中有新的错误,不是访问元胞数组的专家
for i = first:N_Files
mat{i} = load(files(i).name);
A{i} = mat{1,i};
x{i} = A{:,i};
ind{i} = find(x{i}>= -0.5 & x{i}<=0.5);
% New error
B{i} = A{ind{i,:},:}; **Index exceeds matrix dimensions.**
xx{i} = B(:,1);
end
%%%%%%%%%%%%% 1 - 旧 %%%%%%%%%%%%%%%%%%%
我写了一个例程来访问放在不同文件夹中的文件。 然后使用以下例程构建一个存储文件数据的元胞数组:
for i = first:N_Files
mat{i} = load(files(i).name); % 1x3 cell
eval(['A' num2str(i) '= mat{1,i} ;']) % A1,A2,A3 dim : 114336x6 double
end
A = {A1, A2, A3}; cell array 1x3
我在访问一些在计算矩阵单元格时创建的向量时遇到问题。
for i = first:N_Files
eval(['x' num2str(i) '= A{:,i} ;']) % create x1, x2, x3
% incorrect code
eval(['ind' num2str(i) '= find('x' num2str(i) >= -0.5 & 'x' num2str(i) <=0.5) ;'])
end
% need this indexing solution
ind1 = find(x1>= -0.5 & x1<=0.5);
ind2 = find(x2>= -0.5 & x2<=0.5);
ind3 = find(x3>= -0.5 & x3<=0.5);
我需要有 eval 函数和 find 函数, 这是可能的? 有有用的解决办法吗? 谢谢
%%%%%%%%%%%%% 完整代码 %%%%%%
这是我必须得到的代码。
for i = first:N_Files
A{i} = load(files(i).name); % 1x3 cell
x = A{:,1};
ind{i} = find(x(:,1)>= -0.5 & x(:,1)<=0.5); % This looks cleaner
B{i} = A{i}(ind{i},:); % Correct,first access element i in A then filter.
xx{i} = B{i}(:,1); %1x3 cell **what i really wanted**
yy{i} = B{i}(:,2);
zz{i} = B{i}(:,3);
u{i} = B{i}(:,4); % vettore velocità
v{i} = B{i}(:,5);
w{i} = B{i}(:,6);
c1{i} = [-0.5:0.01:0.5];
c2{i} = [0:0.01:2] ;
[X{i},Z{i}] = meshgrid(c1{i},c2{i});
U{i} = griddata(xx{i},zz{i},u{i},X{i},Z{i});
U{i}(isnan(U{i}))=0; % interpolazione ai bordi
W{i} = griddata(xx{i},zz{i},w{i},X{i},Z{i});
W{i}(isnan(W{i}))=0;
figure
pcolor(X{i},Z{i},(U{i}.^2+W{i}.^2).^0.5);
shading(gca,'interp')
title('Velocità')
colorbar;
axis square
hh = streamslice(X{i},Z{i},U{i},W{i});
set(hh,'color','k');
end
好的,我会尽力帮助你。首先,如果你有一个维度为 1xN 的单元格,你只需要一个索引:A{i} = mat{i}
。但是,您随后会看到 A==mat
,这意味着两者都不需要。在下一行中,您执行 x{i} = A{:,i}
,这似乎与您在前一行中所做的相同 => x==mat
。这意味着我们可以删除两行。那么我猜你的目标是为每个文件找到绝对值小于 0.5 的索引并将每个索引存储在一个单元格中,对吗?然后是错误:通过执行 A{ind{i,:},:}
,您实际上是在子引用 A
本身,而不是 A
的每个元素。 A
的大小为 1*n 个文件。你要做的确实是这样的:B{i} = A{i}(ind{i})
.
因此,如果这不是您想要的,请发表评论。否则,删除冗余变量。 并确保您没有混淆单元格和矩阵。您使用单元格作为数组的容器:a{n} 指的是单元格元素 n 中的数组,a{n}(m) 指的是位于单元格元素 n 中的数组中的矩阵元素 m。 好运气!
for i = first:N_Files
mat{i} = load(files(i).name);
%A{i} = mat{1,i}; % not needed mat==x
%x{i} = A{:,i}; % not needed x==A
x = mat; % Fix this later, I do not want to change any variable names.
% ind{i} = find(x{i}>= -0.5 & x{i}<=0.5);
ind{i} = find(abs(x{i})<=0.5); % This looks cleaner
%B{i} = A{ind{i,:},:}; **Index exceeds matrix dimensions.**
B{i} = A{i}(ind{i}); % Correct,first access element i in A then filter.
xx{i} = B(:,1); %I do not know what you tries to do but probably
%xx{i}=B{i} => x==B so one variable is redundant.
end