标签: intersect

使用LINQ来对象在特定属性上相交和除外

当我有2个List<string>对象,那么我可以使用Intersect,并Except在他们身上直接得到一个输出IEnumerable<string>.这很简单,但是如果我想要更复杂的东西的交集/分离怎么办?

例如,尝试获取ClassA对象的集合,这是ClassA对象AStr1ClassB对象的交叉结果BStr; :

public class ClassA {
    public string AStr1 { get; set; }
    public string AStr2 { get; set; }
    public int AInt { get; set; }
}
public class ClassB {
    public string BStr { get; set; }
    public int BInt { get; set; }
}
public class Whatever {
    public void xyz(List<ClassA> aObj, List<ClassB> bObj) {
        // *** this …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects intersect

6
推荐指数
1
解决办法
7026
查看次数

为什么INTERSECT和嵌套的JOIN一样慢?

我正在使用MS SQL.

我有一个巨大的表与索引来快速查询:

select userid from IncrementalStatistics where
IncrementalStatisticsTypeID = 5 and
IncrementalStatistics.AssociatedPlaceID = 47828 and
IncrementalStatistics.Created > '12/2/2010
Run Code Online (Sandbox Code Playgroud)

它在不到1秒的时间内返回.该表有数十亿行.只有大约10000个结果.

我希望这个查询也能在大约一秒钟内完成:

select userid from IncrementalStatistics where
IncrementalStatisticsTypeID = 5 and
IncrementalStatistics.AssociatedPlaceID = 47828 and
IncrementalStatistics.Created > '12/2/2010'

intersect

select userid from IncrementalStatistics where
IncrementalStatisticsTypeID = 5 and
IncrementalStatistics.AssociatedPlaceID = 40652 and
IncrementalStatistics.Created > '12/2/2010'

intersect

select userid from IncrementalStatistics where
IncrementalStatisticsTypeID = 5 and
IncrementalStatistics.AssociatedPlaceID = 14403 and
IncrementalStatistics.Created > '12/2/2010'
Run Code Online (Sandbox Code Playgroud)

但它需要20秒.所有单个查询都需要<1秒,并返回大约10k的结果.

我希望SQL内部将每个子查询的结果抛出到哈希表中并进行哈希交集 - 应该是O(n).结果集足够大以适应内存,因此我怀疑这是一个IO问题.

我编写了一个备用查询,它只是一系列嵌套的JOIN,这也需要大约20秒,这是有道理的.

为什么INTERSECT这么慢?它是否在查询处理的早期阶段缩减为JOIN?

sql algorithm join query-optimization intersect

6
推荐指数
1
解决办法
4755
查看次数

Python列表交集效率:generator还是filter()?

我想在Python(2.7)中交叉两个列表.我需要结果可迭代:

list1 = [1,2,3,4]
list2 = [3,4,5,6]
result = (3,4) # any kind of iterable
Run Code Online (Sandbox Code Playgroud)

在交叉点之后首先提供完整的迭代,以下哪个更有效?

使用发电机:

result = (x for x in list1 if x in list2)
Run Code Online (Sandbox Code Playgroud)

使用filter():

result = filter(lambda x: x in list2, list1)
Run Code Online (Sandbox Code Playgroud)

其他建议?

感谢
Amnon

python intersection list intersect python-2.7

6
推荐指数
3
解决办法
8118
查看次数

Sql交叉条件

我想知道我们是否可以做有条件的交叉.theres是somes查询,但结果是错误的(总是空的).我写下应该得到什么.

DECLARE @CAN_USE_TABLE1 BIT
DECLARE @CAN_USE_TABLE2 BIT
DECLARE @CAN_USE_TABLE3 BIT
DECLARE @CAN_USE_TABLE4 BIT

DECLARE @TABLE1 AS TABLE ( ABC INT ) -- values will be 1,2,3
DECLARE @TABLE2 AS TABLE ( ABC INT ) -- values will be 1,2
DECLARE @TABLE3 AS TABLE ( ABC INT ) --EMPTY TABLE
DECLARE @TABLE4 AS TABLE ( ABC INT ) --EMPTY TABLE
INSERT INTO @TABLE1 VALUES (1)
INSERT INTO @TABLE1 VALUES (2)
INSERT INTO @TABLE1 VALUES (3)
INSERT INTO @TABLE2 VALUES (1)
INSERT …
Run Code Online (Sandbox Code Playgroud)

sql conditional intersect

6
推荐指数
1
解决办法
2792
查看次数

重叠范围检查重叠

我有一个范围列表,我想知道它们是否重叠.

我有以下代码.哪个似乎没有用.有没有更简单的方法来做到这一点或工作的方式:)

提前感谢任何建议.

   public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private IList<Range> rangeList;

    private void Form1_Load(object sender, EventArgs e)
    {
        rangeList.Add(new Range{FromNumber = 0, ToNumber = 100});
        rangeList.Add(new Range { FromNumber = 101, ToNumber = 200 });

        // this range should over lap and throw an exception 
        rangeList.Add(new Range { FromNumber = 199, ToNumber = 300 });

    }

    private bool RangesOverlap()
    {
        var bigList = new List<List<int>>();

        foreach (var range in this.rangeList)
        {
            bigList.Add(new List<int> …
Run Code Online (Sandbox Code Playgroud)

.net c# list range intersect

6
推荐指数
1
解决办法
2414
查看次数

删除INTERSECT

我有两个表,列数相同,没有主键(我知道,这不是我的错).现在我需要删除表B中存在的表A中的所有行(它们相等,每个行有30列).

我认为最直接的方法是做一个INNER JOIN并解决我的问题.但是,为所有列编写条件(担心NULL)并不优雅(可能因为我的表也不优雅).

我想用INTERSECT.我不知道该怎么办?这是我的第一个问题:

我试过(SQL Fiddle):

declare @A table (value int, username varchar(20))
declare @B table (value int, username varchar(20))

insert into @A values (1, 'User 1'), (2, 'User 2'), (3, 'User 3'), (4, 'User 4')
insert into @B values (2, 'User 2'), (4, 'User 4'), (5, 'User 5')

DELETE @A 
    FROM (SELECT * FROM @A INTERSECT SELECT * from @B) A
Run Code Online (Sandbox Code Playgroud)

但是所有行都从表中删除了@A.

这让我想到了第二个问题:为什么命令DELETE @A FROM @B会从表中删除所有行@A …

sql sql-server intersect sql-server-2012 sql-delete

6
推荐指数
1
解决办法
4130
查看次数

MySQL INTERSECT通过连接表?

所以基本上我有两个表,包含URL和TAGS,通过连接表TAGS_URLS在两者之间具有has-and-belongs-to-many关系.

通过标记查找URL的简单查询将是:

SELECT urls.id FROM urls 
  INNER JOIN tags_urls ON urls.id=tags_urls.url_id
  INNER JOIN tags ON tags_urls.tag_id=tags.id 
WHERE tags.tag IN ("sample","tag","list");
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试恢复包含所有一组标记的所有URL的交集.即,只有包含标签"sample"和"tag"AND"list"的URL.

我有一个工作查询,但我无法在不到30秒的时间内执行查询.

SELECT a.id
  FROM
    (SELECT DISTINCT urls.id FROM urls
      INNER JOIN tags_urls ON tags_urls.url_id=urls.id INNER JOIN tags ON tags.id=tags_urls.tag_id
      WHERE tags.tag = 'sample') a
  JOIN
     (SELECT DISTINCT urls.id FROM urls
      INNER JOIN tags_urls ON tags_urls.url_id=urls.id INNER JOIN tags ON tags.id=tags_urls.tag_id
      WHERE tags.tag = 'list') b
  ON a.id = b.id;
Run Code Online (Sandbox Code Playgroud)

结果集是正确的,但性能可怕.

我目前还在Redis数据库中将数据复制为存储在标记集中的URL ID列表,这样我就可以做到这样的事情并很快得到结果集.

SINTER "tag-sample" "tag-list"
Run Code Online (Sandbox Code Playgroud)

通过合理的努力,是否有可能通过SINTER将此任务的MySQL性能提升到Redis级别?

mysql has-and-belongs-to-many intersect

5
推荐指数
1
解决办法
2135
查看次数

R在多个标准上交叉data.frame

我试图基于多个条件上的两个data.frames的交集来填充二进制向量.

我有代码工作,但我觉得只是为了得到二进制矢量是内存过多.

当我将我的代码应用于我的完整数据(40毫米+行)时.我开始有记忆问题.

是否有更简单的方法来生成向量?

以下是一些样本数据(例如,子样本仅包括完整样本中的obs.):

ob1_1 <- as.data.frame(cbind(c(1999),c("111","222","666","777")),stringsAsFactors=FALSE)
ob2_1 <- as.data.frame(cbind(c(2000),c("111","333","555","777")),stringsAsFactors=FALSE)
ob3_1 <- as.data.frame(cbind(c(2001),c("111","222","333","777")),stringsAsFactors=FALSE)
ob4_1 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

full_sample <-  rbind(ob1_1,ob2_1,ob3_1,ob4_1)
colnames(full_sample) <- c("yr","ID")

ob1_2 <- as.data.frame(cbind(c(1999),c("111","222","777")),stringsAsFactors=FALSE)
ob2_2 <- as.data.frame(cbind(c(2000),c("333")),stringsAsFactors=FALSE)
ob3_2 <- as.data.frame(cbind(c(2001),c("888")),stringsAsFactors=FALSE)
ob4_2 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

sub_sample <-  rbind(ob1_2,ob2_2,ob3_2,ob4_2)
colnames(sub_sample) <- c("yr","ID")
Run Code Online (Sandbox Code Playgroud)

这是我的工作代码:

q_intersect <- ""
q_intersect <- paste(q_intersect , "select       a.yr, a.ID       ", sep=" ")
q_intersect <- paste(q_intersect , "from         full_sample a  ", sep=" ")
q_intersect <- paste(q_intersect , "intersect                     ", sep=" ")
q_intersect <- paste(q_intersect , "select       b.yr, b.ID …
Run Code Online (Sandbox Code Playgroud)

memory r intersect sqldf

5
推荐指数
1
解决办法
2425
查看次数

使用LINQ的两个列表的交集

我有一个名为admin的用户,该用户具有公司列表。我想返回拥有一个或多个相同公司的用户列表。我正在使用Linq使用此查询,但是我不确定为什么它不起作用。我不太了解.Any()的功能,但是如果我不包括它,则程序会出现语法错误。这是我的尝试:

public List<User> GetUsers(User admin)
{
    return Users.Where(user=>user.Companys.Intersect(admin.Companys)).Any()).ToList();

}
Run Code Online (Sandbox Code Playgroud)

c# linq database list intersect

5
推荐指数
1
解决办法
3545
查看次数

查询相交中的 Python API sentinelsat 错误

我在搜索包含特定坐标的图像时遇到问题。我无法让 intersect 函数与 API 一起使用。

我收到此错误消息:

sentinelsat.sentinel.SentinelAPIError: HTTP status 200 OK: Invalid query string. Check the parameters and format.
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能让查询与交集一起工作?

使用的代码:

from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt
from datetime import date
from shapely.geometry import box, Polygon

api = SentinelAPI('myusername', 'mypassword','https://scihub.copernicus.eu/dhus')

footprint='footprint:"intersects(POLYGON((0 0,1 1,0 1,0 0)))"'

products = api.query(footprint,
                     date=('20180901', date(2018, 9, 3)),
                     area_relation='Intersects',
                     platformname='Sentinel-2',
                     cloudcoverpercentage=(0, 10))

print(products)

#this works  
#api.download_all(products)
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

python api intersect sentinelsat

5
推荐指数
1
解决办法
717
查看次数