背景:
我有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) 在蟒蛇中:
如何设置一个数组等于它的前半部分,删除前半部分之后的所有条目?
我已经尝试过的事情
a = a[0 ; len(a)/2 ]
这似乎不起作用!
问题
我试图声明一个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文件并将内容设置为等于变量,而不是听编码,这将解决此问题。这将如何运作?我也知道单引号必须替换为两个单引号。我做到了,但是我仍然有完全相同的问题。感谢您对理解问题的任何帮助。
系统参数
完整代码
这是我正在执行的完整代码,给我错误:
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) 题:
如何在开始时快速将0添加到大型数组(~600 000个条目)中,以使数组的长度达到下一个2的幂.(2 ^ n)除了np.concatinate()之外还有更快的解决方案吗?
我已经尝试过的:
这是垫左功能:
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 ×3
arrays ×2
combinations ×1
large-data ×1
list ×1
numpy ×1
sql ×1
sql-server ×1
xml ×1