如何从numpy数组中删除元素对?

时间:2019-07-27 07:52:31

标签: python-3.x numpy

我有一个数组:


coordinates = np.asarray(list(product(seq, seq)))-fieldSize_va/2.0

此坐标为numpy.ndarray类型,具有1600个元素(对)。可以看作是:

  

array([[-4.5,-4.5],         [-4.5,-4.26923077],        [-4.5,-4.03846154],        ...,        [4.5,4.03846154],        [4.5,4.26923077],         [4.5,4.5]])

我还有另一个数组:

centralLines = np.asarray([(xa,ya),(xa,yb),(xb,ya),(xb,yb)])

其值为:

  

array([[0.11538462,0.11538462],        [0.11538462,-0.11538462],        [-0.11538462,0.11538462],        [-0.11538462,-0.11538462]])

坐标的变量包含 centralLines 变量中的所有对。我想从坐标中删除 centralLines的对元素。怎么做??

坐标变量是使用以下代码计算的:

import math
import numpy as np 
from itertools import product
from numpy import linspace,degrees,random

N=40*40

fieldSize_va = 9

seq = linspace(0, fieldSize_va,math.sqrt(N))

coordinates = np.asarray(list(product(seq, seq)))-fieldSize_va/2.0

1 个答案:

答案 0 :(得分:0)

解决方案

一种简单的解决方法是扫描原始数组并保留不同的对:

result = np.array([position for position in coordinates if position not in centralLines])

但是,我必须警告您该解决方案尚未优化。也许其他人会提供更快的矢量化解决方案。

侧注1

我建议您遵循python语法的一些常见准则,即PEP8

旁注2

仅一次导入numpy可以提高代码的可读性!

重复:

import numpy as np
from numpy import linspace

seq = linspace(0, fieldSize_va, math.sqrt(N))

更好:

import numpy as np

seq = np.linspace(0, fieldSize_va, math.sqrt(N))

旁注3

numpy中已经包含平方根,如np.sqrt。然后,您可以预先导入math模块。