小编jac*_*kis的帖子

随机访问Python中大型列表的所有成对组合

背景:

我有44906项清单:large = [1, 60, 17, ...].我还有一台内存有限的个人电脑(8GB),运行Ubuntu 14.04.4 LTS.

目标:

我需要以large内存效率的方式找到所有成对组合,而不事先填充所有组合的列表.

问题和我到目前为止所做的:

当我使用itertools.combinations(large, 2)并尝试将其分配到列表时,我的内存会立即填满,而且性能会非常慢.这样做的原因是,两两组合的数量是这样n*(n-1)/2,其中n是列表中元素的个数.

n=44906出来的组合数量44906*44905/2 = 1008251965.包含这么多条目的列表太大而无法存储在内存中.我希望能够设计一个函数,以便我可以插入一个数字i来查找i此列表中数字的成对组合,以及以某种方式动态计算此组合的方法,而无需参考1008251965元素列表不可能存储在内存中.

我正在尝试做的一个例子:

假设我有一个数组 small = [1,2,3,4,5]

在我有代码的配置中,itertools.combinations(small, 2)将返回一个元组列表:

[(1, 2), # 1st entry
 (1, 3), # 2nd entry
 (1, 4), # 3rd entry
 (1, 5), # 4th entry
 (2, 3), # 5th entry
 (2, 4), # 6th entry 
 (2, 5), # 7th entry
 (3, 4), …
Run Code Online (Sandbox Code Playgroud)

python combinations list combinatorics large-data

4
推荐指数
2
解决办法
682
查看次数

设置一个数组等于它在python中的条目的前半部分

在蟒蛇中:

如何设置一个数组等于它的前半部分,删除前半部分之后的所有条目?

我已经尝试过的事情

a = a[0 ; len(a)/2 ]

这似乎不起作用!

python arrays

2
推荐指数
1
解决办法
388
查看次数

在SQL中声明XML变量时非法的XML字符

问题

我试图声明一个XML变量,并和设置它等于这个 XML文件中像这样我的SQL查询中:DECLARE @x XML = 'xml content here';。但是,当我尝试使用当前的XML文件执行此操作时,我将以下错误消息打印到屏幕上:

Msg 9420, Level 16, State 1, Line 1 XML parsing: line 1132, character 265, illegal xml character

我已经尝试解决的方法

  • 我试图通过用两个单引号替换XML文件中的所有单引号来转义单引号,然后复制到查询中。没运气。
  • 我尝试取出&符,但这似乎不起作用。在SQL检测到错误的位置附近,似乎没有任何特殊字符。再没有运气了。

问题

在我看来,单引号不是问题。我无法确切地找到非法字符是什么,如何过滤掉这些字符。也许从外部文件导入XML文件并将内容设置为等于变量,而不是听编码,这将解决此问题。这将如何运作?我也知道单引号必须替换为两个单引号。我做到了,但是我仍然有完全相同的问题。感谢您对理解问题的任何帮助。

系统参数

  • MS SQL Server管理工作室
  • Windows Server 2012 R2标准

完整代码

这是我正在执行的完整代码,给我错误:

DECLARE @x XML = ' copy xml file here... ';

With MyPersonCTE AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS PersonID
          ,p.value('FirstName[1]','varchar(max)') AS FirstName
          ,p.value('LastName[1]','varchar(max)') AS LastName
          ,p.value('Biography[1]','varchar(max)') AS Biography
          ,p.value('Expertise[1]','varchar(max)') AS Expertise
          ,p.value('Image[1]','varchar(max)') AS …
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server illegal-characters

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

垫0的Numpy阵列到最近的两个力量

题:

如何在开始时快速将0添加到大型数组(~600 000个条目)中,以使数组的长度达到下一个2的幂.(2 ^ n)除了np.concatinate()之外还有更快的解决方案吗?

我已经尝试过的:

  • 使用np.concatenate(0,arr)函数,直到数组的长度等于2的下一个幂.我的代码有效,只需要很长时间.

这是垫左功能:

def PadLeft(arr):
    nextPower = NextPowerOfTwo(len(arr))
    deficit = int(math.pow(2, nextPower) - len(arr))
    #for x in range(1, int(deficit)):
    for x in range(0, deficit):    
        arr = np.concatenate(([0], arr))
    return arr
Run Code Online (Sandbox Code Playgroud)

这是两个功能的下一个功能:

def NextPowerOfTwo(number):
    # Returns next power of two following 'number'
    return math.ceil(math.log(number,2))
Run Code Online (Sandbox Code Playgroud)

我的实施:

arr = np.ones(())
a = PadLeft(arr)
Run Code Online (Sandbox Code Playgroud)

谢谢!

python arrays numpy

1
推荐指数
2
解决办法
2012
查看次数