假设我想迭代一个numpy数组并打印每个项目。我将在稍后使用它来根据一些规则操纵我的数组中的(i,j)条目。
我已经阅读了numpy文档,看起来你可以使用类似的索引(或切片)来轻松访问数组中的各个元素。但是当我尝试在循环中访问它时,似乎我无法对每个(i,j)条目做任何事情。
row= 3
column = 2
space = np.random.randint(2, size=(row, column))
print space, "\n"
print space[0,1]
print space[1,0] #test if I can access indiivdual elements
输出:
[[1,1
[1,1
[0,0]]
1
1
例如,使用上面的内容我想迭代每一行和每一行并打印每个条目。我会考虑使用以下内容:
for i in space[0:row,:]:
for j in space[:,0:column]:
print space[i,j]
我得到的输出是
[1,1]
[1,1]
[1,1]
[1,1]
[1,1]
[1,1]
[1,1]
[1,1]
[1,1]
显然这不起作用。我认为问题是我访问整个行和列而不是任何给定行和列中的元素。我已经过了几个小时的numpy文档了,我仍然不确定如何解决这个问题。
我主要担心的是我想通过使用循环和一些条件来改变每个(i,j)条目,例如(使用上面的循环):
for i in space[0:row,:]:
for j in space[:,0:column]:
if [i+1,j] + [i,j+1] == 2:
[i,j] = 1
答案 0 :(得分:2)
开始于:
for i in range(row):
for j in range(column):
print space[i,j]
您正在循环中生成索引,然后索引某个元素!
相关的numpy docs on indexing are here。
但看起来,您还应该阅读基本的python-loops。
开始简单并阅读一些文档和教程。在我看到 Praveen 的评论后,我觉得这里的这个简单的答案有点不好,这个答案并不比他的评论多得多,但也许上面的链接正是你所需要的。< / p>
通过尝试:
来学习numpy的一般性评论所以在你的情况下,下面的内容应该给你一个警告(不是python;你脑子里有一个),因为你可能希望我迭代一个维度的值:
print((space[0:row,:]).shape)
# output: (3, 2)
答案 1 :(得分:1)
迭代二维数组有很多种方法:
N
按行:
In [802]: x=np.array([[1,1],[1,0],[0,1]])
In [803]: print(x) # non-iteration
[[1 1]
[1 0]
[0 1]]
添加In [805]: for row in x:
...: print(row)
[1 1]
[1 0]
[0 1]
以获取索引
enumerate
双级迭代:
In [806]: for i, row in enumerate(x):
...: row += i
In [807]: x
Out[807]:
array([[1, 1],
[2, 1],
[2, 3]])
当然你可以迭代范围:
In [808]: for i, row in enumerate(x):
...: for j, v in enumerate(row):
...: print(i,j,v)
0 0 1
0 1 1
1 0 2
1 1 1
2 0 2
2 1 3
哪个最好取决于您是否需要使用这些值,还是需要修改它们。如果修改,您需要了解该项目是否可变。
但请注意,我可以在没有显式迭代的情况下删除for i in range(x.shape[0]):
for j in range(x.shape[1]):
x[i,j]...
for i,j in np.ndindex(x.shape):
print(i,j,x[i,j])
:
+1