我有下面的2D数组,其中1总是在左边:
arr = np.array([ [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 0, 0, 0] ])
字符串如何找到每行中最近出现的1的索引?我的预期结果是:
array([2, 0, 1, 3, 0])
型
qjp7pelc1#
如果你总是在每一行都有一个1,在反向数组上使用numpy.argmax:
numpy.argmax
# if only 0/1 out = arr.shape[1] - np.argmax(arr[:, ::-1], axis=1) -1 # else out = arr.shape[1] - np.argmax(arr[:, ::-1] == 1, axis=1) -1
字符串输出:array([2, 0, 1, 3, 0])如果您可以有没有1的行:
arr = np.array([ [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 0, 0, 0], [0, 0, 0, 0] ]) m = arr[:, ::-1] == 1 out = arr.shape[1] - np.argmax(arr[:, ::-1], axis=1) -1 out = np.where(m.any(1), out, np.nan)
型输出:array([ 2., 0., 1., 3., 0., nan])
array([ 2., 0., 1., 3., 0., nan])
8zzbczxx2#
有了2个循环,你就可以实现你所需要的……
result = [] for row in arr: last = -1 # if there is no 1 for i in range(len(row)): if row[i] == 1: last = i result.append(last)
字符串结果将是一个列表,但您可以将结果类型更改为您喜欢的任何类型,例如NumPy数组等
xtupzzrd3#
你可以通过以下方式得到所有存在1的索引:
k = np.where(arr == 1) (array([0, 0, 0, 1, 2, 2, 3, 3, 3, 3, 4], dtype=int64), #This gives the row number array([0, 1, 2, 0, 0, 1, 0, 1, 2, 3, 0], dtype=int64)) #This gives the index
字符串要查找每行中最新出现的1,请执行以下操作:
[k[1][x] for x in range(len(k[0])-1) if k[0][x]!= k[0][x+1]] #output [2, 0, 1, 3]
xesrikrc4#
你可以使用numpy.apply_along_axis来处理一行代码。我认为使用np.max()和np.where()也非常直观。
arr = np.array([ [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 0, 0, 0] ]) indices = np.apply_along_axis(lambda row: np.max(np.where(row == 1)),axis=1,arr=arr) print(indices)
字符串测试结果:
[2 0 1 2 3 0]
型您也可以反转数组并使用np.min,然后检查它们是否匹配,以确定是否有任何像[1,1,0,1]这样的情况。请查看numpy文档,因为他们有很多使用这些函数的例子。
u0njafvf5#
我们可以使用cumsum和argmax:
cumsum
argmax
np.argmax(np.cumsum(arr, axis=1), axis=1)
字符串输出:
5条答案
按热度按时间qjp7pelc1#
如果你总是在每一行都有一个1,在反向数组上使用
numpy.argmax
:字符串
输出:
array([2, 0, 1, 3, 0])
如果您可以有没有1的行:
型
输出:
array([ 2., 0., 1., 3., 0., nan])
8zzbczxx2#
有了2个循环,你就可以实现你所需要的……
字符串
结果将是一个列表,但您可以将结果类型更改为您喜欢的任何类型,例如NumPy数组等
xtupzzrd3#
你可以通过以下方式得到所有存在1的索引:
字符串
要查找每行中最新出现的1,请执行以下操作:
型
xesrikrc4#
你可以使用numpy.apply_along_axis来处理一行代码。我认为使用np.max()和np.where()也非常直观。
字符串
测试结果:
型
您也可以反转数组并使用np.min,然后检查它们是否匹配,以确定是否有任何像[1,1,0,1]这样的情况。请查看numpy文档,因为他们有很多使用这些函数的例子。
u0njafvf5#
我们可以使用
cumsum
和argmax
:字符串
输出:
型