我有两个sq矩阵(a,b)的大小为100000 X 100000.我必须区分这两个矩阵(c = ab).结果矩阵'c'是稀疏矩阵.我想找到所有非零元素的索引.我必须多次做这个操作(> 100).
最简单的方法是使用两个for循环.但这是计算密集型的.你能告诉我任何算法或包/库最好在R/python/c中尽快做到这一点吗?
出于某种原因,当我尝试运行以下代码时:
var casper = require('casper').create();
var x = require('casper').selectXPath;
var links = [];
casper.start('http://www.website.com');
function getLinks() {
var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href')
});
}
casper.then(function() {
links = this.evaluate(getLinks);
this.echo(links);
}
casper.run();
Run Code Online (Sandbox Code Playgroud)
返回一个null对象,但是当我使用与thenClick方法相同的xpath选择器时,一切正常并且url会更改.为什么到底是这样的?
我正在考虑以前没有遇到的问题,我正在尝试确定最有效的算法.
我正在迭代两个列表,使用每对元素来计算我想要排序的值.我的最终目标是获得前20名的成绩.我可以将结果存储在第三个列表中,按绝对值对列表进行排序,然后简单地将前二十个切片,但这并不理想.
由于这些列表有可能变得非常大,我理想情况下只想存储前20个绝对值,在计算新的最高值时逐出旧值.
在python中实现这个的最有效方法是什么?
我可能会以错误的方式接近这个,但我有一个POST请求:
response = requests.post(full_url, json.dumps(data))
Run Code Online (Sandbox Code Playgroud)
这可能由于多种原因而可能失败,其中一些与数据有关,一些是临时故障,由于设计不良的端点可能会返回相同的错误(服务器使用无效数据做不可预测的事情).为了捕获这些临时故障并让其他人通过,我认为最好的方法是重试一次,然后如果再次引发错误则继续.我相信我可以用嵌套的尝试/除外,但对我来说这似乎是不好的做法(如果我想在放弃之前尝试两次怎么办?)
那个解决方案是:
try:
response = requests.post(full_url, json.dumps(data))
except RequestException:
try:
response = requests.post(full_url, json.dumps(data))
except:
continue
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?或者,通常有更好的方法来处理潜在的错误HTTP响应吗?
我正在尝试做一些我觉得微不足道的事情,所以如果其他地方有一些简单的解决方案,请原谅我。
我正在为一些内容索引编写测试,为此我试图将一些二进制数据(pdf)插入到我拥有的 mongo 集合中。但是,我在这方面遇到了很多麻烦。这是我相关代码的当前状态
pseudo_file = StringIO()
pdf = pisa.CreatePDF("This is a test", pseudo_file)
test = {"data": pseudo_file}
test.update({"files_id": {"name": "random_asset_name"}, "category": "asset"})
self.chunk_collection.insert(json.dumps(test))
Run Code Online (Sandbox Code Playgroud)
我设法在 Pymongo google group 上找到了一个解决这个问题的旧线程(https://groups.google.com/forum/#!topic/mongodb-user/uBAbY1wdQbs),但我似乎找不到Binary对象用于解决该问题,它似乎没有包含在 Python 中(我使用的是 2.7)
现在我遇到的问题是该StringIO对象不是 JSON 可序列化的,这是明智的,但 pymongo 需要一个有效的 utf8 对象传递给它。我尝试使用 base64 编码StringIO.getvalue(),并直接序列化相同的值。
当然,pdf 不是 utf8 值,所以我想知道是否有另一种方法让 pymongo 识别出我正在向它发送原始二进制文件。任何帮助表示赞赏。
在一个稍微有点人为的实验中,我想将Python的一些内置函数与numpy的函数进行比较.当我开始计时时,我发现了一些奇怪的东西.
当我写下面的内容时:
import timeit
timeit.timeit('import math; math.e**2', number=1000000)
Run Code Online (Sandbox Code Playgroud)
我会以极其统计上显着的方式在几乎随机的交替中得到两个不同的结果.
这在2秒和0.5秒之间交替.
这让我很困惑,所以我做了一些实验来弄清楚发生了什么,我只是更加困惑.所以我尝试了以下实验:
[timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100)]
Run Code Online (Sandbox Code Playgroud)
这完全导致了0.5的数字.然后我尝试使用发电机播种:
test = (timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100))
[item for item in test]
Run Code Online (Sandbox Code Playgroud)
这导致了一个完整的2.0号码列表.
根据alecxe的建议,我将时间表改为:
timeit.timeit('math.e**2', 'import math', number=1000000)
Run Code Online (Sandbox Code Playgroud)
类似地在大约0.1到0.4秒之间交替,但当我重新比较生成器和列表推导的实验时,但这次结果被翻转.也就是说,生成器表达式经常出现0.1秒的数字,而列表理解返回0.4秒的完整列表.
直接控制台输出:
>>> test = (timeit.timeit('math.e**2', 'import math', number=1000000) for i in xrange(100))
>>> test.next()
0.15114784240722656
>>> timeit.timeit('math.e**2', 'import math', number=1000000)
0.44176197052001953
>>>
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用运行dwm的Ubuntu 12.04,我在xterm和gnome-terminal中看到了这些结果.我正在使用python 2.7.3
有谁知道这里发生了什么?这对我来说似乎很奇怪.
我正在使用python与igraph库:
from igraph import *
g = Graph()
g.add_vertices(4)
g.add_edges([(0,2),(1,2),(3,2)])
print g.betweenness()
Run Code Online (Sandbox Code Playgroud)
我想生成一个包含10000个节点和100000个边的随机图.边缘可以是随机的.请建议一种随机边缘的方法(使用numpy.random.rand)
我正在尝试为我的网站制作一些不错的电子邮件模板,但我对精心设计的代码和功能的渴望之间存在冲突。
我的问题是我所有的电子邮件模板都像标准模板一样格式化:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet"...>
</head>
<body>
Some stuff
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它作为网页显示得很好,但是在尝试将其作为格式化的电子邮件发送时,它本质上只是发送了该Some stuff部分,这意味着没有任何格式可以真正传达它。
我当前的电子邮件代码如下所示:
message = Message(
subject="Subject",
html= render_template(
'emails/confirmation_email.html',
confirmation_code=confirmation.confirmation_code
),
sender = ("sender", "sender@gmail.com")
)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Jinja2 模板和 Flask-Mail 扩展。
基本上,我真的很想在我的电子邮件中包含这些样式表,但我真的反对在样式标签中包含所有内容。
我正在尝试编写一个程序来解析一系列HTML文件,并将结果数据存储在.csv电子表格中,这非常依赖于新行正确的位置.我已经尝试了所有可以找到的方法来删除某些文本中的换行符,但无济于事.相关代码如下所示:
soup = BeautifulSoup(f)
ID = soup.td.get_text()
ID.strip()
ID.rstrip()
ID.replace("\t", "").replace("\r", "").replace("\n", "")
dateCreated = soup.td.find_next("td").get_text()
dateCreated.replace("\t", "").replace("\r", "").replace("\n", "")
dateCreated.strip()
dateCreated.rstrip()
# debug
print('ID:' + ID + 'Date Created:' + dateCreated)
Run Code Online (Sandbox Code Playgroud)
结果代码如下所示:
ID:
FOO
Date Created:
BAR
Run Code Online (Sandbox Code Playgroud)
这个和同一个程序的另一个问题一直困扰着我.帮助太棒了.谢谢.
编辑:想出来,这是一个非常愚蠢的错误.而不仅仅是做
ID.replace("\t", "").replace("\r", "").replace("\n", "")
Run Code Online (Sandbox Code Playgroud)
我应该做的
ID = ID.replace("\t", "").replace("\r", "").replace("\n", "")
Run Code Online (Sandbox Code Playgroud) 
我想比较这两个图像的接近程度(相似区域中的红色),但我不能逐个像素地进行,因为它们的颜色位置不完全相同。有人知道这里有什么好方法吗?
谢谢,