Python 带numpy arange的二维阵列

Python 带numpy arange的二维阵列,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,所以我试图用numpy函数arange来构造二维数组,我遇到了一些麻烦 我想构造一个int的2D数组,其中位置I,j处的条目是(I+j)。也就是说,类似这样的数组(建议使用arange): 我还需要构造另一个数组(100x100),如果j是I的除数,则索引I,j处的值为True,否则为False。也就是说,一个数组看起来像: [[False False False ..., False False False] [ True True True ..., True True True

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

我想构造一个int的2D数组,其中位置I,j处的条目是(I+j)。也就是说,类似这样的数组(建议使用arange):

我还需要构造另一个数组(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]]
我不能使用嵌套循环(尽管我可以使用循环构造列表),也不能使用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]

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

您可以对所需的第一个数组尝试此操作:

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)])

对于第二个数组,这里有一种使用-

样本运行-

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]]

要使用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)

根据你的第一个问题:

np.add(*np.indices((nrow, ncol)))
对于
nrow=5
ncol=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

如何将其转换为数组?我知道它是如何工作的,但我的问题是我不能使用np.array函数;有人建议我使用np.arange来构造它。你可以像这样简单地使用np数组构造函数
np.array([range(I,I+10)for I in range(10)])
Nice with the second!OP可能希望使用
np.arange(10)
来代替预期的o/p。11美元/右箭头10美元是什么意思?我是一个编程初学者,所以idk这是什么意思我是说a=np.arange(10)太棒了,谢谢!我同意,它更具可读性,占用的空间更少。发布的解决方案中有哪一个适合您?我看你也没有接受你之前问题的任何解决方案。有关接受解决方案的更多信息,请阅读此处-谢谢!我真的以为我已经接受了一个解决方案,但我想我已经忘记了;谢谢你的提醒
np.add(*np.indices((nrow, ncol)))
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]])