我有一個很大的2D numpy數組,我知道一對代表數組的一個元素的索引。我想設置這個元素和周圍的20×20面積等於零;我曾嘗試使用切片技術:在numpy數組中圍繞已知索引(x,y)切片20×20區域
s = array[x:10, y:10]
s == 0
但是,儘管先前定義了x和y,但這是'無效切片'。
我將不勝感激任何關於如何才能完成這一任務的建議,因爲我是Python新手。
我有一個很大的2D numpy數組,我知道一對代表數組的一個元素的索引。我想設置這個元素和周圍的20×20面積等於零;我曾嘗試使用切片技術:在numpy數組中圍繞已知索引(x,y)切片20×20區域
s = array[x:10, y:10]
s == 0
但是,儘管先前定義了x和y,但這是'無效切片'。
我將不勝感激任何關於如何才能完成這一任務的建議,因爲我是Python新手。
我相信你的意思是array[x:x+10,y:y+10]
my_array[x - 10:x + 10, y - 10:y + 10] = 0
或
s = my_array[x - 10:x + 10, y - 10:y + 10]
s[:] = 0
TypeError:不支持的操作數類型爲 - :'list'和'int',儘管這看起來是正確的切片方法 –
@CandaceAdams:然後'x'或'y'是一個列表而不是一個整數。 –
您選擇陣列A
的多個元素與A[start:stop]
其中start
和stop
是從零開始的索引。
對於2D陣列也適用:A[start1:stop1, start2:stop2]
。
用下面的腳本
import numpy as np
A = np.ones((5,5))
A
看起來像
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
與
A[1:4,1:4] = 0
這個你
[[ 1. 1. 1. 1. 1.]
[ 1. 0. 0. 0. 1.]
[ 1. 0. 0. 0. 1.]
[ 1. 0. 0. 0. 1.]
[ 1. 1. 1. 1. 1.]]
請注意,對於以您的x,y座標爲中心的零塊,它必須具有奇數尺寸。例如,零的在以下的塊不居中的座標x,y = 4,6,但是,從中心座標該小區的,即X,Y = 4.5,5.5:
import numpy
a = numpy.ones((10,10))
x,y = 4,6
s = 2
a[x - s: x + s, y-s: y + s] = 0
array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
而這一個是:
a = numpy.ones((10,10))
x,y = 4,6
s = 2
a[x - s: x + s + 1, y-s: y + s + 1] = 0
print a
array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.],
[ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
如果腳本是用於基於像素的圖像處理,這可能是一個重要的區別。
謝謝,我試過了,它導致以下錯誤; TypeError:只能連接列表(不是「int」)到列表 –
什麼是x和y?我認爲他們的整數表示頂部/左側角點索引?如果你已經有x和y像beg/end index那樣,你需要'array [x [0]:x [1] + 1,y [0]:y [1] +1]''。還有其他答案指出,上述soln捕獲10x10個子陣列。 – yosukesabai