这是一个基本的程序,但由于我是MATLAB的新手,我无法找到解决方案。
我有一个列向量"时间"我想要打印价值" 1"在前147个细胞中,接着是" 2"在148到2 * 147细胞等。为此,我写了以下脚本:
Trial>> c=1;
Trial>> k=0;
Trial>> for i = c:146+c
Time(i,1)=1+k;
c=i;
k=k+1;
end
我知道我需要迭代循环"时间(i,1)= 1 + k;"在它执行下一个语句之前。我试过使用休息,但这不应该工作。任何人都可以建议我获得所需结果的解决方案吗?(在C中使用花括号非常简单。)
答案 0 :(得分:3)
我确定您不想在每次迭代中运行c=i;
。
我的代码应该适合您:
x = 10; % Replace 10 by the max number you need in your array.
k = 1;
for i = 1 : x * 147
Time(i, 1) = k;
if rem(i, 147) == 0
k = k + 1;
end
end
答案 1 :(得分:3)
这是应该是vectorized 的一段代码的主要示例,可以帮助您理解vectorization。您的代码可以这样写:
n = 147;
reps = 10; %% Replace this by the maximum number you want your matrix to have
Time = reshape(bsxfun(@plus, zeros(n,1), 0:reps), 1, []);
<强>解释强>
让A
为列向量(1列,n
行),B
为行向量(1行,m
列。
此处bsxfun(@plus, A, B)
将在A
中添加B
中所有元素的所有元素,如下所示:
A(1)+B(1) A(1)+B(2) A(1)+B(3) ... A(1)+B(m)
A(2)+B(1) A(2)+B(2) ............. A(2)+B(m)
............................................
A(n)+B(1) A(n)+B(2) .............. A(n)+B(m)
现在,对于我们提供的两个向量:zeros(n,1)
和0:reps
,这将为我们提供;
0+0 0+1 0+2 0+reps
0+0 0+1 0+2 0+reps
% n rows of this
所以,我们现在需要做的是将每列放在彼此之下,这样你就会先让列为零,然后是带有1的行,......最后是带有reps
的列(在你的情况下147。)
这可以通过reshaping矩阵来实现:
reshape(bsxfun(@plus, zeros(n,1), 0:reps), [], 1);
^ ^ ^ ^
| | | Number of rows in the new matrix. When [] is used, the appropriate value will be chosen by Matlab
| | Number of rows in the new matrix
| matrix to reshape
reshape command
另一种方法是使用kron
:
kron(ones(reps+1, 1) * 0:(n-1)
要记录,请查看您的代码:
您应该始终为循环内创建的矩阵预分配内存。在这种情况下,您知道它将成为维度((reps+1)*n-by-1)
的矩阵。这意味着您应该Time = zeros((reps+1)*n, 1);
。这将大大加快您的代码速度。
你不应该在Matlab中使用i
和j
作为变量名,因为它们表示虚构单位(sqrt(-1)
)。例如,您可以执行:for ii = 1:(n*147)
。
当循环应该从c到c + 146时,你不希望循环中有c=i
。这没有多大意义。
答案 2 :(得分:2)
您可以使用repmat
,
x = 10; % Sequence length (or what ever it can be called)
M = repmat(1:x,147,1); % Replicate array 1:x for 147 columns
M = M(:); % Reshape the matrix so that is becomes a column vector.
我可以假设这是一个练习循环的任务,但这样可行。
答案 3 :(得分:1)
另一种解决方案可能是
[UINavigationBar appearance].setTitleTextAttributes = [NSForegroundColorAttributeName : [UIColor whiteColor]
[UINavigationBar appearance].barTintColor = [UIColor blueColor]
[UINavigationBar appearance].barStyle = UIBarStyleBlack
首先构造一个具有所需长度的数组。然后你分开,向上一轮。然后1到147将变为1。