没有显式输入值,只使用一行代码(没有分号!),我正在尝试编写一个代码,创建以下一系列数字,并将其输出到屏幕:
a = 1 0 3 0 5 0 7 0 9 0
这是我实现这一目标的最佳尝试,
a= [1:10].*[1 0 1 0 1 0 1 0 1 0]
这会产生并显示正确的结果,但由于我输入第二个矩阵的值([1 0 1 0 1 0 ...]),我仍然需要更短的方法。
有什么想法吗?感谢。
答案 0 :(得分:3)
您可以使用repmat
复制[1,0]
数组5次,共10个元素。因此,请尝试:
a = [1:10].*repmat([1 0], 1, 5)
a =
1 0 3 0 5 0 7 0 9 0
或者,您可以使用纯索引执行此操作:
a([1:2:9 10]) = [1:2:9 0]
a =
1 0 3 0 5 0 7 0 9 0
第二段代码的技巧是,当你以这种方式动态分配变量时,MATLAB / Octave会填充你没有用零索引的任何缺失值。因此,我们将在位置1,3,5,7,9中将值定义为正好为1,3,5,7,9。但是,单独执行此操作将创建一个9元素数组。要制作这10个元素,我必须提供10的附加索引,然后在表达式的右侧,我必须添加一个零。
答案 1 :(得分:1)
或创建
a = 1:10;
然后将偶数位置的元素设置为0
a(2:2:10) = 0
a =
1 0 3 0 5 0 7 0 9 0
还有一个班轮:
a = (1:10) .* (mod(1:10, 2) != 0)
a =
1 0 3 0 5 0 7 0 9 0
答案 2 :(得分:0)
这是我的建议:
kron( [1:2:10] , [1 0])
我更喜欢它的原因是因为您可以在行中的单个位置修改上限(10)。
如果您不熟悉kron
,它的作用是需要两个矩阵A
和B
,并返回一个如下所示的大矩阵:
[ A(1,1)*B A(1,2)*B ... ]
[ A(2,1)*B A(2,2)*B ... ]
[ ... ... ... ]