无法切片 numpy 数组输入
python 199
原文标题 :unable to slice numpy array input
预期输出:[[1,0][1,0]]预期输出:[[0,0][0,1]]等循环运行范围。错误:在打印语句。循环无法运行通过不同的索引。错误消息只有整数标量数组可以转换为标量索引
import numpy as np
field = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 1, 0],
[1, 0, 1, 0, 1, 1, 1, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
a2= np.array(field)
print(a2)
for i in list(range(10)):
for i in a2[i:i+2,i:i+2]:
print(a2[i:i+2,i:i+2])
回复
我来回复-
Lia 评论
如果您的目标是每次使用步骤 1 从左到右和从上到下迭代 a2 时打印出一个 2 x 2 矩阵,那么 for 循环应该如下所示:
for i in range(9): for j in range(9): print(a2[i:i+2, j:j+2])
输出是:
[[1 0] [1 0]] [[0 0] [0 1]] [[0 0] [1 0]] [[0 0] [0 0]] [[0 1] [0 0]]
等等。
2年前 -
playerJX1 评论
里面的
for
循环应该是for j in a2[i:i+2,i:i+2]:
才能工作。这好像是for i in range(10): print(a2[i:i+2,i:i+2])
给出相同的结果
2年前 -
im_vutu 评论
错误是说您使用过 i 一次,然后它不是一个遍历索引的数组。为什么要使用两个 for 循环?一为能胜任。再次无需在范围内投射列表。
for i in range(10): print(a2[i:i+2,i:i+2])
2年前 -
aaossa 评论
您可以使用 2×2 窗口迭代矩阵,方法是使用矩阵的形状作为参考并使用 for 循环来滑动每个维度(x 和 y)。这是一个可能的实现:
for i in range(2, a2.shape[0]): for j in range(2, a2.shape[1]): print(a2[i-2:i,j-2:j])
2年前 -
hpaulj 评论
检查循环期间的值。这是基本的python循环逻辑
In [310]: for i in range(2): # don't need list(range...) ...: print(i) ...: print(a2[i:i+2, i:i+2]) ...: for i in a2[i:i+2, i:i+2]: ...: print(i) ...: ...: 0 # outer i [[1 0] # the a2 window [1 0]] [1 0] # inner i, rows of that window [1 0] 1 # outer i [[0 1] [0 1]] [0 1] [0 1]
将内部
i
用作a2
的索引是没有意义的。它们已经是从a2
派生的数组。我不知道为什么初学者会犯这个错误for i in alist: alist[i] ... # i is an element of the list, not an index
有
i
存在np.array([1,0])
,这个:a2[i:i+2,i:i+2] # a2[np.array([1,0]):np.array([3,2]), ....)
产生你的错误。
你第一个
i in range
用对了;为什么要改变第二个?在第二个循环中使用不同的迭代变量,并且
range
再次产生更合乎逻辑的嵌套迭代:In [313]: for i in range(2): ...: print(i) ...: for j in range(2): ...: print(j) ...: print(a2[i:i+2, j:j+2])
2年前