首页 > 解决方案 > 如何从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]])

coordinates变量包含变量中的所有对centralLines。我想centralLinescoordinates. 这个怎么做??

使用以下coordinates代码计算变量:

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

标签: python-3.xnumpy

解决方案


解决方案

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

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模块。


推荐阅读