带有 numpy arange 的二维数组

sch*_*vil 4 python arrays numpy multidimensional-array

所以我试图用 numpy 函数 arange 构造二维数组,但遇到了一些麻烦。

我想构造一个整数的二维数组,其中位置 i,j 处的条目是 (i+j)。也就是这样的数组(推荐使用arange):

[[ 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]]
Run Code Online (Sandbox Code Playgroud)

我还需要构造另一个数组(100x100),其中如果 j 是 i 的除数,则索引 i,j 处的值为 True,否则为 False。也就是说,一个数组看起来像:

[[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]]
Run Code Online (Sandbox Code Playgroud)

我无法使用嵌套循环(尽管我可以使用循环来构造列表)并且无法使用 np.array 函数。我目前有以下适用于第一部分的内容,但我希望将其全部作为一个数组,而不是打印出来。

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

如果我能得到一些帮助,那就太好了

编辑:我当前的代码显示此输出:

[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]
Run Code Online (Sandbox Code Playgroud)

为什么第一行不与其他行对齐?

Dr *_*ile 5

用 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]])  
Run Code Online (Sandbox Code Playgroud)

对于第二个数组,@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)
Run Code Online (Sandbox Code Playgroud)