Matrix 倍频程-创建1到10之间由零分隔的奇数序列

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=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], 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无论如何,因为我没有考虑归零偶数条目!谢谢我使用偶数属性添加了一个一行程序。