小编jaa*_*aap的帖子

shebang env首选python版本

我有一些python-2.x脚本,我在不同的系统,Debian和Arch linux之间复制.Debian将python安装为'/ usr/bin/python',而Arch将其安装为'/ usr/bin/python2'.一个问题是,在Arch linux上,'/ usr/bin/python'也存在,它引用了python-3.x. 所以每次我复制一个文件我都要纠正shebang线,这有点烦人.

在Arch我用

#!/usr/bin/env python2
Run Code Online (Sandbox Code Playgroud)

我在debian上

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

由于Debian上不存在'python2',有没有办法传递首选应用程序?也许有一些shell扩展?我不介意它是否依赖于例如'/ bin/sh'.以下会很好,但不起作用.

#!/usr/bin/env python2 python
#!/usr/bin/env python{2,}
#!/bin/sh python{2,}
#!/bin/sh -c python{2,}
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是'sh -c python {2,}'在命令行上运行:即它调用python2可用,否则调用python.

我宁愿不在Debian上创建链接'python2-> python',因为如果我将脚本提供给其他人则不会运行.我也不想让'python'指向Arch上的python2,因为它打破了更新.

没有编写包装器,有没有一种干净的方法可以做到这一点?

我之前已经意识到类似的问题,但我没有看到任何符合我的边界条件的答案:) 有条件的shebang行为不同版本的Python

---更新

我一起破解了一个丑陋的shell解决方案,它现在可以完成这项任务.

#!/bin/bash
pfound=false; v0=2; v1=6
for p in /{usr/,}bin/python*; do  
  v=($(python -V 2>&1 | cut -c 7- | sed 's/\./ /g'))
  if [[ ${v[0]} -eq $v0 && ${v[1]} -eq $v1 ]]; then pfound=true; break; fi
done
if ! $pfound; then echo "no suitable python version …
Run Code Online (Sandbox Code Playgroud)

python linux scripting shebang

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

将XML提供给Google日历

我有一个带有研讨会的XML文件,我想将其提供给谷歌日历.XML文件由其他人维护并定期更新,因此我想以谷歌自动获取这些更改的方式执行此操作.

我对这种事情没有多少经验,所以我希望有人可以指出我正确的方向.

这是我想要处理的XML的一个示例.

(XML文件:"seminars.xml")

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ical.xsl"?>

<seminars>
  <lastupdate>20150707</lastupdate>

  <seminar>
    <speaker>A. Einstein</speaker>
    <location>Zurich</location>
    <date>20150607</date>
    <time>15:45:00</time>
    <university>Princeton</university>
    <abstract>
      <title>On the structure of generalized patent office spaces</title>
      <content>To be announced.</content>
    </abstract>
  </seminar>

</seminars>
Run Code Online (Sandbox Code Playgroud)

我想说,实现这一目标最明显的方法是使用XSLT样式表来处理XML并构建一些google-calendar可以读取的文件.我有一个网站/服务器,我可以把这个XSL文件放在理想情况下我希望只能上传一个正确的文件.

我看起来像这样的XSL表.

(XSL文件:"ical.xsl")

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" media-type="text/calendar"/>
<xsl:variable name="crlf">&#13;&#10;</xsl:variable>
<xsl:template match="/">BEGIN:VCALENDAR<xsl:value-of select="$crlf"/>
CALSCALE:GREGORIAN<xsl:value-of select="$crlf"/>
VERSION:2.0<xsl:value-of select="$crlf"/>
SEQUENCE:1<xsl:value-of select="$crlf"/>
X-WR-TIMEZONE:Europe/Paris<xsl:for-each select="seminars/seminar"><xsl:value-of select="$crlf"/>
BEGIN:VEVENT<xsl:value-of select="$crlf"/>
LOCATION:<xsl:value-of select="location"/><xsl:value-of select="$crlf"/>
DTSTART:<xsl:value-of select="date"/>T154500<xsl:value-of select="$crlf"/>
DTEND:<xsl:value-of select="date"/>T164500<xsl:value-of select="$crlf"/>
DESCRIPTION:seminar by <xsl:value-of select="speaker"/><xsl:value-of select="$crlf"/>
SUMMARY:<xsl:value-of select="abstract/title"/><xsl:value-of select="$crlf"/> …
Run Code Online (Sandbox Code Playgroud)

xml csv xslt

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

scalapack矩阵对角化(pdsyevd)

我使用的ScaLAPACK的分而治之算法编写并行矩阵对角化一个小的测试代码PDSYEVD在C.不过,我是新来的ScaLAPACK看着它出现的变量设置为我无法找到一个相当可怕的量源好的例子.我需要对角化的矩阵类型是真实的,对称的,相当稀疏的,大小约为1000x1000.

一个简单的(串行)基于LAPACK的代码如下所示:

/* "matrix diagonalization using lapack" */
#include <stdio.h>
#include <stdlib.h>

/* DSYEV prototype */
extern void dsyev_(char* jobz, char* uplo, int* n, double* a, int* lda, 
                double* w, double* work, int* lwork, int* info );
#define n 4     

int main(int argc, char *argv[])
{
  int i,j,info,lda,lwork,N;
  double A[n][n], a[n*n], work[100*n],w[n];

  /* initialize matrices */
  for(i=0;i<n;i++) { for(j=0;j<n;j++) A[i][j] = (i+j); }

  /* diagonalize */
  N=n;  lda=n;  lwork=10*n;  info=0;
  for(i=0;i<n;i++) { for(j=0;j<n;j++) a[i+j*n]=A[i][j]; }
  dsyev_("V","L",&N,a,&lda,w,work,&lwork,&info);

  /* print …
Run Code Online (Sandbox Code Playgroud)

c scalapack

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

矢量化失败了GCC

我试图理解矢量化,但令我惊讶的是这个非常简单的代码没有被矢量化

#define n 1024
int main () {
  int i, a[n], b[n], c[n];

  for(i=0; i<n; i++) { a[i] = i; b[i] = i*i; }
  for(i=0; i<n; i++) c[i] = a[i]+b[i];
}
Run Code Online (Sandbox Code Playgroud)

虽然英特尔编译器由于某种原因导致初始化循环,第5行.

> icc -vec-report a.c
a.c(5): (col. 3) remark: LOOP WAS VECTORIZED
Run Code Online (Sandbox Code Playgroud)

有了海湾合作委员会,我似乎一无所获

> gcc -ftree-vectorize -ftree-vectorizer-verbose=2 a.c
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?这不应该是一个非常简单的可矢量化循环吗?所有相同的操作,连续存储器等.我的CPU支持SSE1/2/3/4.

--- 更新 ---

根据下面的答案,这个例子对我有用.

#include <stdio.h>
#define n 1024

int main () {
  int i, a[n], b[n], c[n];

  for(i=0; i<n; i++) { a[i] = i; b[i] = i*i; }
  for(i=0; …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc vectorization icc

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

为什么多处理池映射与串行映射相比没有加速?

我有这个非常简单的python代码,我希望通过并行化来加速它.然而,无论我做什么,multiprocessing.Pool.map都不会在标准地图上获得任何东西.

我已经读过其他线程,其中人们使用这个非常小的函数,这些函数不能很好地并行化并导致过多的开销,但我认为这不应该是这种情况.

难道我做错了什么?

这是一个例子

#!/usr/bin/python

import numpy, time

def AddNoise(sample):
    #time.sleep(0.001)
    return sample + numpy.random.randint(0,9,sample.shape)
    #return sample + numpy.ones(sample.shape)

n=100
m=10000
start = time.time()
A = list([ numpy.random.randint(0,9,(n,n)) for i in range(m) ])
print("creating %d numpy arrays of %d x %d took %.2f seconds"%(m,n,n,time.time()-start))

for i in range(3):
    start = time.time()
    A = list(map(AddNoise, A))
    print("adding numpy arrays took %.2f seconds"%(time.time()-start))

for i in range(3):
    import multiprocessing
    start = time.time()
    with multiprocessing.Pool(processes=2) as pool:
        A = list(pool.map(AddNoise, A, …
Run Code Online (Sandbox Code Playgroud)

python numpy pool multiprocessing python-3.x

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

标签 统计

c ×2

python ×2

c++ ×1

csv ×1

gcc ×1

icc ×1

linux ×1

multiprocessing ×1

numpy ×1

pool ×1

python-3.x ×1

scalapack ×1

scripting ×1

shebang ×1

vectorization ×1

xml ×1

xslt ×1