gpt4 book ai didi

python - 如何通过排除对 Numpy 数组进行子集化

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:43 26 4
gpt4 key购买 nike

在 Numpy 中,您可以通过给出列表或整数来对某些列进行子集化。例如:

a = np.ones((10, 5))

a[:,2] or a[:,[1,3,4]]

但是如何排除呢?它返回除 2 或 [1,3,4] 之外的所有其他列。

原因是我想将所有其他列设为零,除了一个或选定列的列表,例如:

a[:, exclude(1)] *= 0

我可以生成一个具有相同形状的新零数组,然后将特定列分配给新变量。但是我想知道有没有更有效的方法

谢谢

最佳答案

一种方法是自己生成索引列表:

>>> a[:,list(i for i in range(a.shape[1]) if i not in set((2,1,3,4)))]
array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])

或排除单个列(在您的编辑之后):

>>> a[:,list(i for i in range(a.shape[1]) if i != 1)]*= 0

或者如果你经常使用它,并且想要使用一个函数(它不会被称为 except,因为这是一个 Python 关键字:

def exclude(size,*args):
return [i for i in range(size) if i not in set(args)] #Supports multiple exclusion

现在

a[:,exclude(a.shape[1],1)]

有效。

@jdehesa 提到你可以使用 Numpy 1.13

a[:, np.isin(np.arange(a.shape[1]), [2, 1, 3, 4], invert=True)]

以及 Numpy 本身的一些东西。

关于python - 如何通过排除对 Numpy 数组进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55573872/

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