如何从向量中删除数字?

How to delete numbers from a vector?

我有这个向量

v = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20)

我想删除 2 和 3 的倍数。我该怎么做?

我试过这样做,但没有成功:

import numpy as np
V = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20)
Mul3 = np.arange(1,21,3)
Mul2 = np.arange(1,21,2)
V1 = V [-mul2]
V2 = V1 [-mul3]

我假设 vector 你指的是你用 () 设置的元组。

您可以使用 list comprehension with two conditions, using the modulo oprerator you can read up on here:

res = [i for i in v if not any([i % 2 == 0, i % 3 == 0])]

Returns

[1, 5, 7, 11, 13, 19]

这个returns一个标准的Python列表;如果你想要 np 数组或 sth,只需更新你的问题。

您可以直接使用模数 2 和模数 3 的结果在 列表理解 中进行过滤。这会保留 mod 2mod 3 值给出的数字不是 falsy 0:

的项目
>>> [i for i in v if i%2 and i%3]
[1, 5, 7, 11, 13, 19]

如果以上内容不够直观,您可以通过明确测试非零结果来使其更详细:

>>> [i for i in v if not i%2==0 and not i%3==0]
[1, 5, 7, 11, 13, 19]

鉴于您已经使用 NumPy,您可以使用 boolean array indexing 删除 23 的倍数:

>>> import numpy as np
>>> v = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20)  # that's a tuple
>>> arr = np.array(v)  # convert the tuple to a numpy array
>>> arr[(arr % 2 != 0) & (arr % 3 != 0)]
array([ 1,  5,  7, 11, 13, 19])

(arr % 2 != 0) 创建一个布尔掩码,其中 2 的倍数是 False,其他所有内容 True 同样,(arr % 3 != 0) 适用于 3。这两个掩码使用 &(和)组合,然后用作 arr

的掩码