具有numpy arange的二维数组
问题描述:
所以我想用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]
为什么会在第一行不排队与其他行?
答
根据您的第一个问题:
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
时的情况。
+0
太棒了,谢谢!我同意,它更具可读性并占用更少的空间 – schCivil
答
对于第二个数组,这里是与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]]
答
做第一个与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)
发布的解决方案是否适合您?我看到你还没有接受你之前的任何问题的解决方案。在这里阅读更多有关接受解决方案的信息 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Divakar
谢谢!我其实已经认为我已经接受了一个解决方案,但我想我已经忘记了;感谢提醒 – schCivil