2016-11-21 97 views
4

所以我想用numpy函數arange構造二維數組,並且我遇到了一些麻煩。具有numpy arange的二維數組

我想構造一個二維數組,其中位置i,j的入口是(i + j)。也就是說,這樣的陣列(reccommended使用人氣指數):

[[ 0 1 2 3 4 5 6 7 8 9] 
[ 1 2 3 4 5 6 7 8 9 10] 
[ 2 3 4 5 6 7 8 9 10 11] 
[ 3 4 5 6 7 8 9 10 11 12] 
[ 4 5 6 7 8 9 10 11 12 13] 
[ 5 6 7 8 9 10 11 12 13 14] 
[ 6 7 8 9 10 11 12 13 14 15] 
[ 7 8 9 10 11 12 13 14 15 16] 
[ 8 9 10 11 12 13 14 15 16 17] 
[ 9 10 11 12 13 14 15 16 17 18]] 

我還需要構建另一個陣列(100×100),其中在索引i的值,j爲真,如果j是i和假的除數除此以外。也就是說,一個數組,看起來像:

[[False False False ..., False False False] 
[ True True True ..., True True True] 
[ True False True ..., False True False] 
..., 
[ True False False ..., True False False] 
[ True False False ..., False True False] 
[ True False False ..., False False True]] 

我無法使用嵌套循環(雖然我可以用循環來構建列表),我不能使用np.array功能。我目前的第一部分有以下內容,但我希望將它全部作爲一個數組打印出來。

i = 0 
j= 10 
for i in range(10): 
    lis = np.arange(i, j) 
    i += 1 
    j += 1 
    print(np.array(lis)) 

如果我能得到一些幫助,那簡直太好了

編輯:我當前的代碼顯示了這個輸出:

[0 1 2 3 4 5 6 7 8 9] 
[ 1 2 3 4 5 6 7 8 9 10] 
[ 2 3 4 5 6 7 8 9 10 11] 
[ 3 4 5 6 7 8 9 10 11 12] 
[ 4 5 6 7 8 9 10 11 12 13] 
[ 5 6 7 8 9 10 11 12 13 14] 
[ 6 7 8 9 10 11 12 13 14 15] 
[ 7 8 9 10 11 12 13 14 15 16] 
[ 8 9 10 11 12 13 14 15 16 17] 
[ 9 10 11 12 13 14 15 16 17 18] 

爲什麼會在第一行不排隊與其他行?

+0

發佈的解決方案是否適合您?我看到你還沒有接受你之前的任何問題的解決方案。在這裏閱讀更多有關接受解決方案的信息 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Divakar

+0

謝謝!我其實已經認爲我已經接受了一個解決方案,但我想我已經忘記了;感謝提醒 – schCivil

回答

2

根據您的第一個問題:

np.add(*np.indices((nrow, ncol))) 

nrow=5ncol=6

array([[0, 1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5, 6], 
     [2, 3, 4, 5, 6, 7], 
     [3, 4, 5, 6, 7, 8], 
     [4, 5, 6, 7, 8, 9]]) 

這種方法不使用numpy.arange功能儘管我覺得它更具可讀性。此外,它支持nrow != ncol時的情況。

+0

太棒了,謝謝!我同意,它更具可讀性並佔用更少的空間 – schCivil

0

你可以試試這個第一個數組,你想:

np.array([range(i,i+10) for i in range(10)]) 

和第二陣列:

np.array([[i>0 and j%i==0 for j in range(10)] for i in range(10)]) 
+0

我將如何將其轉換爲數組?我看到它是如何工作的,但我的問題是我不能使用np.array函數;我建議使用np.arange來構建它 – schCivil

+0

你可以簡單地使用像這樣的np數組構造函數'np.array([range(i,i + 10)for i in range(10)])' – burhan

3

對於第二個數組,這裏是與broadcasting一種方法 -

a = np.arange(10) 
out = (np.mod(a,a[:,None])==0) & (a[:,None]!=0) 

樣品運行 -

In [511]: a = np.arange(10) 

In [512]: print (np.mod(a,a[:,None])==0) & (a[:,None]!=0) 
[[False False False False False False False False False False] 
[ True True True True True True True True True True] 
[ True False True False True False True False True False] 
[ True False False True False False True False False True] 
[ True False False False True False False False True False] 
[ True False False False False True False False False False] 
[ True False False False False False True False False False] 
[ True False False False False False False True False False] 
[ True False False False False False False False True False] 
[ True False False False False False False False False True]] 
4

做第一個與numpy的:

>>> a = np.arange(11) 
>>> a[:,None]+a 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 
    [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 
    [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 
    [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], 
    [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 
    [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 
    [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], 
    [ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], 
    [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
    [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]]) 

對於第二陣列,@Divakar具有良好的方法。也許有點簡單的語法來做到這一點:

>>> (a%a[:,None])==0 
array([[ True, True, True, True, True, True, True, True, True, True, True], 
    [ True, True, True, True, True, True, True, True, True, True, True], 
    [ True, False, True, False, True, False, True, False, True, False, True], 
    [ True, False, False, True, False, False, True, False, False, True, False], 
    [ True, False, False, False, True, False, False, False, True, False, False], 
    [ True, False, False, False, False, True, False, False, False, False, True], 
    [ True, False, False, False, False, False, True, False, False, False, False], 
    [ True, False, False, False, False, False, False, True, False, False, False], 
    [ True, False, False, False, False, False, False, False, True, False, False], 
    [ True, False, False, False, False, False, False, False, False, True, False], 
    [ True, False, False, False, False, False, False, False, False, False, True]], dtype=bool) 
+0

Nice with第二個! OP可能正在尋找使用'np.arange(10)',而不是看着預期的o/p。 – Divakar

+0

謝謝!我看你是對的。 OP,更改$ 11 \ rightarrow 10 $ ... –

+0

$ 11/rightarrow 10 $是什麼意思?我是編程初學者,所以idk是什麼意思 – schCivil