2015-09-28 62 views
1

我試圖在八度創建隨機幻方,並試圖像rand(magic(3)),它給了意想不到的無窮無盡的結果是這樣的:隨機魔法陣給人意想不到的效果

ans(:,:,1,1,2,1,1,1,1) = 

0.894903 0.296415 0.143990 
0.186976 0.305691 0.505485 
0.224823 0.834031 0.285508 
0.336706 0.318158 0.076293 

在試圖rand(magic(4))和5 ,6,7 ...它給出了這樣的消息

error: out of memory or dimension too large for Octave's index type

這種模糊的結果可能是什麼原因造成的?

+1

你想做什麼?魔法(3)返回一個3x3的矩陣。函數rand期望作爲參數每個維度的元素數量,因此您要創建一個8x3x4x1x5x9x6x7x2矩陣。對於rand(magic(4)),矩陣會產生prod(magic(4)(:))= 20922789888000元素,這些元素太大而無法放入內存 – Andy

+0

我看到了Dan的回答,他們部分解釋了這個問題。當magic(n)'返回一個數字爲'1:n * n'的正方形時,你只是在談論不重複的數字。這打開了更多的功能。請更新你的問題,並明確一個神奇的廣場是什麼。 – Daniel

回答

2

你在做什麼? magic(3)創建了一個矩陣,其中所有行和列合計爲相同的數字。 rand(x)創建一個n均勻分佈隨機數的維矩陣。例如,如果您撥打y = rand([1,2,3]),您將獲得均勻分佈數字的維數矩陣。 y的尺寸將與您的輸入匹配,即size(y)應返回[1,2,3],元素數將爲prod(y)。因此,rand(magic(3))元素的數量應該等於prod(prod(magic(3))),即362880。如果你這樣做了rand(magic(4)),那麼元素的數量將超過20萬億,這就是爲什麼你的內存不足。

+0

那我該如何創建一個隨機幻方?我的意思是八度每次都會返回相同的n * n魔術方塊。 –

+1

你對魔方的定義是什麼? – Dan

+0

一個矩陣,其中行和列的所有元素的總和相同。 –

相關問題