Matrix 倍频程-创建1到10之间由零分隔的奇数序列
在不显式键入值的情况下,仅使用一行代码(无分号!),我尝试编写一段代码,创建以下数字系列,并将其输出到屏幕: a=1030507090 这是我实现这一目标的最佳尝试Matrix 倍频程-创建1到10之间由零分隔的奇数序列,matrix,octave,matrix-multiplication,Matrix,Octave,Matrix Multiplication,在不显式键入值的情况下,仅使用一行代码(无分号!),我尝试编写一段代码,创建以下数字系列,并将其输出到屏幕: a=1030507090 这是我实现这一目标的最佳尝试 a= [1:10].*[1 0 1 0 1 0 1 0 1 0] 这将生成并显示正确的结果,但由于我正在键入第二个矩阵的值([1 0 1 0 1 0…]),因此我仍然需要一种更短的方法 有什么想法吗?谢谢。您可以使用将[1,0]数组复制5次,总共10个元素。因此,请尝试执行以下操作: a = [1:10].*repmat([1 0
a= [1:10].*[1 0 1 0 1 0 1 0 1 0]
这将生成并显示正确的结果,但由于我正在键入第二个矩阵的值([1 0 1 0 1 0…]),因此我仍然需要一种更短的方法
有什么想法吗?谢谢。您可以使用将[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,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,然后在表达式的右侧,我必须添加一个零 或创建一个
a = 1:10;
然后将偶数位置的元素设置为0
a(2:2:10) = 0
a =
1 0 3 0 5 0 7 0 9 0
编辑(感谢rayryeng指出了规则!) 和一艘班轮:
a = (1:10) .* (mod(1:10, 2) != 0)
a =
1 0 3 0 5 0 7 0 9 0
或者创建一个
a = 1:10;
然后将偶数位置的元素设置为0
a(2:2:10) = 0
a =
1 0 3 0 5 0 7 0 9 0
编辑(感谢rayryeng指出了规则!) 和一艘班轮:
a = (1:10) .* (mod(1:10, 2) != 0)
a =
1 0 3 0 5 0 7 0 9 0
以下是我的建议:
kron([1:2:10],[10])
我之所以更喜欢它,是因为您可以在行中的单个位置修改上限(10)
如果您是kron
新手,那么它将获取两个矩阵A
和B
,并返回一个大矩阵,如下所示:
[ A(1,1)*B A(1,2)*B ... ]
[ A(2,1)*B A(2,2)*B ... ]
[ ... ... ... ]
以下是我的建议:
kron([1:2:10],[10])
我之所以更喜欢它,是因为您可以在行中的单个位置修改上限(10)
如果您是kron
新手,那么它将获取两个矩阵A
和B
,并返回一个大矩阵,如下所示:
[ A(1,1)*B A(1,2)*B ... ]
[ A(2,1)*B A(2,2)*B ... ]
[ ... ... ... ]
酷!这也行+1.然而,我认为OP只需要一个命令。从技术上讲,这将是两个,但仍然很好地利用了数组的偶数位置。@rayryeng哦,我忽略了“只有一行代码”部分。现在我明白了为什么你的答案看起来太聪明了!不用担心:)为了可读性,我会选择你的代码而不是我的。单行约束有点烦人,但这是除了使用
repmat
之外我唯一能想到的。仍然给了你一个+1无论如何,因为我没有考虑归零偶数条目!谢谢我添加了一个使用偶数属性的一行。酷!这也行+1.然而,我认为OP只需要一个命令。从技术上讲,这将是两个,但仍然很好地利用了数组的偶数位置。@rayryeng哦,我忽略了“只有一行代码”部分。现在我明白了为什么你的答案看起来太聪明了!不用担心:)为了可读性,我会选择你的代码而不是我的。单行约束有点烦人,但这是除了使用repmat
之外我唯一能想到的。仍然给了你一个+1无论如何,因为我没有考虑归零偶数条目!谢谢我使用偶数属性添加了一个一行程序。