預期輸出:[[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])
uj5u.com熱心網友回復:
如果您的目標是每次使用步驟 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]]
等等。
uj5u.com熱心網友回復:
那個內部for回圈應該for j in a2[i:i 2,i:i 2]:讓它作業。這好像是
for i in range(10):
print(a2[i:i 2,i:i 2])
給出相同的結果
uj5u.com熱心網友回復:
錯誤是說您使用過 i 一次,然后它不是一個遍歷索引的陣列。為什么要使用兩個 for 回圈?一為能勝任。再次無需在范圍內投射串列。
for i in range(10):
print(a2[i:i 2,i:i 2])
uj5u.com熱心網友回復:
您可以使用 2x2 視窗迭代矩陣,方法是使用矩陣的形狀作為參考并使用 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])
uj5u.com熱心網友回復:
檢查回圈期間的值。這是基本的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])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453045.html
上一篇:將1添加到資料框中的所有數值
