簡體   English   中英

索引 numpy 數組,每列有兩個數組的開始和結束

[英]Index numpy array with two arrays given start and end for each column

我有一個尺寸為 NxM 的二維 numpy 數組 A 我有兩個數組的開頭和結尾的維度為 Nx1

對於 A[k,:] 給出的每一行 k,我想將從 start[k] 到 end[k] 的列設置為 0:

A[:,start:end]=0

但是,我收到錯誤

TypeError: only integer scalar arrays can be converted to a scalar index

如果我只是索引

A[:,start]=0

有用。 但這不是我想要實現的。

start[k]:end[k] 的長度對於每個 k 都不同

隨着開始和結束索引數組的長度- startsends LARG十歲上下的長度,我們可以創建這些地方的面具-

r = np.arange(A.shape[1])
mask = (r >= np.asarray(starts)[:,None]) & (r < np.asarray(ends)[:,None])
A[mask] = 0

樣品運行 -

In [47]: np.random.seed(0)

In [48]: A = np.random.randint(10,100,(4,10))

In [49]: A
Out[49]: 
array([[54, 57, 74, 77, 77, 19, 93, 31, 46, 97],
       [80, 98, 98, 22, 68, 75, 49, 97, 56, 98],
       [91, 47, 35, 87, 82, 19, 30, 90, 79, 89],
       [57, 74, 92, 98, 59, 39, 29, 29, 24, 49]])

In [50]: starts = np.array([2,4,1,0,])

In [51]: ends = np.array([4,7,5,2])

In [52]: r = np.arange(A.shape[1])
    ...: mask = (r >= np.asarray(starts)[:,None]) & (r < np.asarray(ends)[:,None])
    ...: A[mask] = 0

In [53]: A
Out[53]: 
array([[54, 57,  0,  0, 77, 19, 93, 31, 46, 97],
       [80, 98, 98, 22,  0,  0,  0, 97, 56, 98],
       [91,  0,  0,  0,  0, 19, 30, 90, 79, 89],
       [ 0,  0, 92, 98, 59, 39, 29, 29, 24, 49]])

用一個小的開始,結束數組,或者如果A是一個非常大的數組,簡單地循環可能會更好。

不知道你在說什么。 它非常適合我:

>>> import numpy as np
>>> a = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> a[:, 1:2] = 0
>>> a
array([[1, 0, 3],
       [4, 0, 6],
       [7, 0, 9]])

要調試您的程序,請先嘗試打印出開始和結束的類型

A[:,start:end]=0

它可以幫助您找出問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM