gpt4 book ai didi

python - 获取 ndArray/list 的所有其他索引

转载 作者:行者123 更新时间:2023-11-28 22:13:18 27 4
gpt4 key购买 nike

给定一个值数组和一个有效的索引数组,我想获得所有其他索引。

正在寻找一种 pythonic 的方式来做到这一点,但这里有一个解决方案示例,并阐明了我要完成的任务:

A = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g'])  # Array of values. Shape: (7,)
B = np.array([0,3,5]) # Array of indices.

# Looking for a more elegant way to do this following line
C = np.array([i for i in range(len(A)) if i not in B]) # Array indices not in B

# Expected Output: C = [1, 2, 4, 6]

编辑:对解决方案进行基准测试

A = np.ones(10000)  
B = np.random.random_integers(low=0, high=len(A) - 1, size=8000)

t1 = time()
mask = np.ones(len(A), dtype=bool)
mask[B] = False
C = np.arange(len(A))[mask]
t1 = time() - t1

t2 = time()
C = np.delete(np.arange(A.size), B)
t2 = time() - t2

t3 = time()
C = np.array([i for i in range(len(A)) if i not in B])
t3 = time() - t3

t4 = time()
C = set(np.arange(len(A))).difference(B)
t4 = time() - t4

print("T1: %.5f" % np.round(t1, 5))
print("T2: %.5f" % np.round(t2, 5))
print("T3: %.5f" % np.round(t3, 5))
print("T4: %.5f" % np.round(t4, 5))

结果(值随 B 中的索引数量变化而变化,但最快的始终保持 T1:

T1: 0.00011 <<< 多次运行上面的脚本,这总是最快的。第二种方法总是落后一点。
T2:0.00017
T3: 0.05746 << 列表推导花费的时间最多。即使删除了 np.array.
T4:0.00158

  • 结论:
    我将使用上面的第二种方法 (T2) 只是因为它是一个单行并且与最快的方法(几乎)花费相同的时间。

最佳答案

您可以使用 np.delete 从可以使用 np.arange 创建的其他索引列表中删除 B 的项目:

inds = np.delete(np.arange(A.size), B)

演示:

In [53]: A = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
...: B = np.array([0,3,5])

In [54]: inds = np.delete(np.arange(A.size), B)

In [55]: inds
Out[55]: array([1, 2, 4, 6])

关于python - 获取 ndArray/list 的所有其他索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com