小编chm*_*lig的帖子

PostgreSQL通配符LIKE用于任何单词列表

我有一个简单的~25个单词列表.我在PostgreSQL中有一个varchar字段,让我们说列表是['foo', 'bar', 'baz'].我想在我的表中找到任何包含这些单词的行.这会有效,但我想要更优雅的东西.

select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
Run Code Online (Sandbox Code Playgroud)

sql postgresql

140
推荐指数
3
解决办法
12万
查看次数

为什么C++链接器允许未定义的函数?

可能令人惊讶的是,这个C++代码打印出来1.

#include <iostream>

std::string x();

int main() {

    std::cout << "x: " << x << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

x 是一个函数原型,它似乎被视为一个函数指针,而C++标准部分4.12布尔转换说:

4.12布尔转换[conv.bool] 1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.对于直接初始化(8.5),std :: nullptr_t类型的prvalue可以转换为bool类型的prvalue; 结果值为false.

但是,x永远不会绑定一个函数.正如我所料,C链接器不允许这样做.但是在C++中,这根本不是问题.谁能解释这种行为?

c++ linker compilation language-lawyer undefined-function

29
推荐指数
3
解决办法
1680
查看次数

加快写入文件的速度

我已经描述了一些我用cProfile继承的遗留代码.我已经做了一些有帮助的改变(比如使用simplejson的C扩展!).

基本上,此脚本将数据从一个系统导出到ASCII固定宽度文件.每行都是一条记录,它有很多值.每行7158个字符,包含大量空格.总记录数为150万条记录.每行生成一行,并且需要一段时间(每秒5-10行).

生成每一行时,它尽可能简单地写入磁盘.分析表明约占总时间的19-20%file.write().对于1,500行的测试用例,即20秒.我想减少这个数字.

现在看来,下一次胜利将减少写入磁盘所花费的时间.如果可能的话,我想减少它.我可以在内存中保留一个记录缓存,但我不能等到最后并立即将其全部转储.

fd = open(data_file, 'w')
for c, (recordid, values) in enumerate(generatevalues()):
        row = prep_row(recordid, values)
        fd.write(row)
        if c % 117 == 0:
                if limit > 0 and c >= limit:
                        break
                sys.stdout.write('\r%s @ %s' % (str(c + 1).rjust(7), datetime.now()))
                sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是在列表中保留记录缓存并分批写出来.会更快吗?就像是:

rows = []
for c, (recordid, values) in enumerate(generatevalues()):
        rows.append(prep_row(recordid, values))
        if c % 117 == 0:
            fd.write('\n'.join(rows))
            rows = []
Run Code Online (Sandbox Code Playgroud)

我的第二个想法是使用另一个线程,但这让我想死在里面.

python performance file-io

21
推荐指数
2
解决办法
3万
查看次数

有效地转换数据帧的多个列

我有一个数据框,我想要使用与某个名称匹配的列来转换所有列(例如,记录日志或其他内容).所以在下面的例子中,我想要记录X.1和X.2,但不是Y或Z.1.

df <- data.frame(
  Y = sample(0:1, 10, replace = TRUE),
  X.1 = sample(1:10),
  X.2 = sample(1:10),
  Z.1 = sample(151:160)
)

# option 1, won't work for dozens of fields
df$X.1 <- log(df$X.1)
df$X.2 <- log(df$X.2)
Run Code Online (Sandbox Code Playgroud)

当数据帧是几个gigabtyes时,有没有一种好的,有效的方法来做到这一点?

r

6
推荐指数
2
解决办法
2万
查看次数

随时创建笛卡尔积

我有一个整数列表a = [0, ..., n]。我想从a生成k个元素的所有可能组合;即a的笛卡尔积本身就是k次。请注意,n和k都可以在运行时更改,因此这至少需要一个可调整的函数。

因此,如果n为3,k为2:

a = [0, 1, 2, 3]
k = 2

desired = [(0,0), (0, 1), (0, 2), ..., (2,3), (3,0), ..., (3,3)]
Run Code Online (Sandbox Code Playgroud)

在python中,我将使用itertools.product()函数:

for p in itertools.product(a, repeat=2):
    print p
Run Code Online (Sandbox Code Playgroud)

Go中惯用的方式是什么?

最初的猜测是返回一个整数切片的闭包,但感觉并不干净。

iterator cartesian-product go

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

在ggplot2中添加轴注释

我有一个 ggplot2 图,其中 x 轴为日期时间,y 轴为分类。我需要在 x 轴上的某些日期放置 9 个文本注释,但图表本身没有空间放置注释。我想将自动生成的日期保留在 x 轴上,并添加我的自定义标签。我不在乎他们是在顶部还是在底部。

下面的合成示例。我有 9 个事件,以及导致这些事件的大量活动。我想在每个事件下方放置一个指示事件名称的文本标签。例如,在 2 月 11 日午夜的数据中,我希望在某处有一个标有“事件 1”的标签。

events <- data.frame(names=c("Event 1", "Event 2", "Event 3", "Event 4", "Event 5", "Event 6", "Event 7", "Event 8", "Event 9"),
                       dates=strptime(c("2013-02-10 11:59 pm", "2013-02-21 11:59 pm", "2013-03-02 11:59 pm", "2013-03-16 11:59 pm", "2013-03-26 12:00 pm", "2013-04-11 11:59 pm", "2013-04-24 11:59 pm", "2013-04-23 11:59 pm", "2013-05-08 12:00 pm")
                                      , "%Y-%m-%d %I:%M %p"))
units <- replicate(125, paste(sample(LETTERS, 8), collapse=""))
n <- 2000 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

使用百分号登录列名称更新表

我用psycopg2连接到了Postgresql数据库。我正在尝试更新列,但是列名称中有一个百分号(我不能更改)。

我正在尝试做:

QRY = """update X set "foo%" = %s"""
cursor.execute(QRY, some_value)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。psycopg2给出有关列表索引超出范围的奇怪错误。我该如何正确逃脱呢?

python postgresql psycopg2

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