2017-02-23 53 views
0

我有一個 4級 4維陣列contourscv2.findContours的結果)在我有一對座標的結尾。它看起來像這樣:如何在NumPy中更改(陣列數組的)數組中軸的值?

print(contours[0][0]) 
→ [[ 676 4145]] 
print(contours[0][0][0]) 
→ [ 676 4145] 
print(contours[0][0][0][1]) 
→ 4145 

我想編輯的軸每個末級陣列的元件1,該值是10,我知道了documentation的大,但我不不知道如何將它應用得如此之深而不會變扁。怎麼做?

+1

我覺得你有你的術語混亂。它是「4維」或「4軸」,而「軸1」我認爲你的意思是「元素1」 – Eric

+0

我確信你是對的。 – MrVocabulary

回答

1

任何這些將工作:

  • contours[:,:,:,1] += 10
  • contours[...,1] += 10
  • contours += [0, 10]
+0

對於'輪廓[:,:,:,1] + = 10',它表示「語法無效」對於'輪廓=輪廓[:,:,:,1] + 10',它表示「TypeError:列表索引必須是整數或切片,而不是元組」,以及輪廓[...,1] + 10' ,而對於cv :: pointSetBoundingRect中的'contours = contours + [0,10]'它說「OpenCV Error:Assertion failed(npoints> = 0 &&(depth == CV_32F || depth == CV_32S))。我不知道這些技巧,所以謝謝,但他們似乎關注Python列表,而不是NumPy數組。 – MrVocabulary

+1

沒有辦法讓第一個給出一個'SyntaxError'。你必須輸入錯誤,或以無效的方式添加到它。對於第二個問題,你必須在你的問題上撒謊 - 這聽起來像是「輪廓」是一個「列表」,而不是「np.array」。第三個聽起來不像是來自這行代碼。 – Eric

+0

我的不好,'contours'是一個列表,但它的成員是numpy數組(直線輪廓[0],輪廓[0] [0]和輪廓[0] [0] [0]),直到'輪廓[0] [0] [0] [0]「,這是numpy int 32.有沒有辦法在列表或數組中使用簡單的方式來做到這一點,而不使用'for'? – MrVocabulary