如果沒有顯式鍵入值,並且只使用一行代碼(無分號!),我正在嘗試編寫一個代碼以創建以下系列號,並且將其輸出到屏幕:Octave - 創建一個1到10之間的奇數序列,用零分隔
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 ...])。
任何想法?謝謝。
如果沒有顯式鍵入值,並且只使用一行代碼(無分號!),我正在嘗試編寫一個代碼以創建以下系列號,並且將其輸出到屏幕:Octave - 創建一個1到10之間的奇數序列,用零分隔
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 ...])。
任何想法?謝謝。
您可以使用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,然後在表達式的右側,我必須添加一個零。
或者創建一個
a = 1:10;
,然後設置在偶數位置的元素爲0
a(2:2:10) = 0
a =
1 0 3 0 5 0 7 0 9 0
EDIT(感謝rayryeng您指出的規則!)
而且一個班輪:
a = (1:10) .* (mod(1:10, 2) != 0)
a =
1 0 3 0 5 0 7 0 9 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 ... ]
[ ... ... ... ]
酷!這也起作用。 +1。但是,我認爲OP需要一個命令。這在技術上將是兩個,但仍然很好地使用陣列的偶數位置。 – rayryeng 2014-09-23 17:57:48
@rayryeng哦,我忽略了「只有一行代碼」的部分。現在我明白爲什麼你的回答看起來太聰明瞭! – ederag 2014-09-23 19:19:21
不用擔心:)爲了便於閱讀,我會選擇你的代碼。單線約束有點煩人,但是除了使用'repmat'之外,這是我唯一能想到的。無論如何,仍然給了你一個+1,因爲我沒有考慮清零偶數條目! – rayryeng 2014-09-23 19:23:11