小编kez*_*zos的帖子

将科学记数法中的数字转换为int

有人可以解释为什么我不能用于int()将字符串科学表示法中表示的整数转换为python int吗?

例如,这不起作用:

print int('1e1')
Run Code Online (Sandbox Code Playgroud)

但这样做:

print int(float('1e1'))

print int(1e1)  # Works
Run Code Online (Sandbox Code Playgroud)

为什么不int将字符串识别为整数?当然它就像检查指数的符号一样简单?

python

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

是否应该在cython中定义列表项类型?

如果我将一个python列表发送到cython函数进行迭代,我想要声明列表项是什么类型的?在cython中循环列表的最佳方法是什么?例如:

#Cython function, passed a list of float items
def cython_f(list example_list):
    cdef int i
    for i in range(len(example_list)):
        #Do stuff
        #but list item type not defined?
        pass

    #Alternative loop
    cdef j float #declaration of list item type
    for j in example_list:
        #Do stuff
        pass
Run Code Online (Sandbox Code Playgroud)

尝试定义列表项类型是否获得了任何速度?是否最好传递numpy数组而不是python列表?

python list cython

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

从特定索引处的迭代器中收集项目

我想知道是否可以.collect()在迭代器上使用以获取特定索引处的项目.例如,如果我以字符串开头,我通常会这样做:

let line = "Some line of text for example";
let l = line.split(" ");
let lvec: Vec<&str> = l.collect();
let text = &lvec[3];
Run Code Online (Sandbox Code Playgroud)

但是最好的是:

let text: &str = l.collect(index=(3));
Run Code Online (Sandbox Code Playgroud)

rust

9
推荐指数
2
解决办法
7201
查看次数

重复使用范围进行迭代

我试图了解如何将范围与迭代器一起使用。如果我声明一个范围并将其与迭代器一起使用,是否可以与另一个迭代器一起重复使用该范围?例如,这不会编译:

fn main() {
    let smallr = 0..10;
    for i in smallr {
        println!("value is {}", i);
    }

    //let smallr = 0..15;  re-defining smallr will work!
    let sum  = smallr.fold(0, |sum, x| sum + x);
    println!("{}", sum);
}
Run Code Online (Sandbox Code Playgroud)

rust

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

添加cython比numpy慢的数组?

我刚刚开始学习cython,所以请原谅我的无知.简单地将两个数组一起添加,cython可以改进numpy吗?我非常糟糕地尝试添加两个数组a + b来给出一个新的数组c:

import numpy as np
cimport numpy as np

DTYPE = np.int
ctypedef np.int_t DTYPE_t

def add_arrays(np.ndarray[DTYPE_t, ndim=2] a, np.ndarray[DTYPE_t, ndim=2] b, np.ndarray[DTYPE_t, ndim=2] c):
    cdef int x = a.shape[0]
    cdef int y = a.shape[1]
    cdef int val_a
    cdef int val_b
    for j in range(x):
        for k in range(y):
            val_a = a[j][k]
            val_b = b[j][k]
            c[j][k] = val_a + val_b    
    return c
Run Code Online (Sandbox Code Playgroud)

但是,当传递这些数组时,此版本的速度要慢700倍(*edit:而不是numpy):

n = 1000 
a = np.ones((n, n), dtype=np.int)
b = np.ones((n, n), dtype=np.int)
c = …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy cython

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

解析和搜索字符串的更好方法是什么?

我一直在寻找加速基本的Python函数,它基本上只需要一行文本并检查子行的行.Python程序如下:

import time

def fun(line):
    l = line.split(" ", 10)
    if 'TTAGGG' in l[9]:
        pass  # Do nothing

line = "FCC2CCMACXX:4:1105:10758:14389# 81 chrM 1 32 10S90M = 16151 16062 CATCACGATGGATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTTTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCTTAGGGGATAGCATTG bbb^Wcbbbbccbbbcbccbba]WQG^bbcdcb_^_c_^`ccdddeeeeeffggggiiiiihiiiiihiiihihiiiihghhiihgfgfgeeeeebbb NM:i:1 AS:i:85 XS:i:65 RG:Z:1_DB31"

time0 = time.time()
for i in range(10000):
    fun(line)
print time.time() - time0
Run Code Online (Sandbox Code Playgroud)

我想看看是否可以使用Rust的一些高级功能来获得一些性能,但代码运行速度要慢得多.Rust转换是:

extern crate regex;
extern crate time;
use regex::Regex;

fn main() {
    let line = "FCC2CCMACXX:4:1105:10758:14389# 81 chrM 1 32 10S90M = 16151 16062 CATCACGATGGATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTTTCCATGCATTTGGTATTTTCGTCTGGGGGGTGTGCACGCTTAGGGGATAGCATTG bbb^Wcbbbbccbbbcbccbba]WQG^bbcdcb_^_c_^`ccdddeeeeeffggggiiiiihiiiiihiiihihiiiihghhiihgfgfgeeeeebbb NM:i:1 AS:i:85 XS:i:65 RG:Z:1_DB31";    
    let substring: &str …
Run Code Online (Sandbox Code Playgroud)

python rust

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

如何使用farmhash算法代替默认值

我试图使用farmhash(1.1.2)替代生锈默认的hashmap哈希算法(Siphash?),看看我是否可以获得任何速度提升.我已经开始使用2x-hash,这给了一个很好的速度增加,虽然我也想和farmhash一起测试,只是为了比较.farmhash文档仅提供与此类似的简短示例:

let value: &str = "somestringkeyorsomthing";
let res64 = farmhash::hash64(&value.as_bytes());
println!("{:?}", res64)
>>> 12095987461079705245
Run Code Online (Sandbox Code Playgroud)

如何使用此方法在hashmap中生成密钥?如果这是一个复杂的过程,有人能指出一个很好的例子吗?

rust

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

列表理解和到位方法

我只是想了解列表理解过程中发生了什么.在列表理解中应用时,一些在"就地"列表上工作的方法似乎不起作用:

a = [[1, 2, 3], [4, 5, 6]]
i1 = id(a[0])

for i in a: i.reverse()
>>> [[3, 2, 1], [6, 5, 4]  # Works
print i1 == id(a[0])  # True, same memory address

a = [i.reverse() for i in a]
>>> [None, None]  # Doesn't work
print i1 == id(a[0])  # False, new memory address

a = [i[::-1] for i in a]
>>> [[3, 2, 1], [6, 5, 4]]  # Works!
print i1 == id(a[0])  # False
Run Code Online (Sandbox Code Playgroud)

我猜这与被复制到不同内存空间的所有元素有关.为什么 …

python list-comprehension list

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

Scikit 学习,将高斯拟合到直方图

在 scikit-learn 中使用 GMM 拟合高斯峰似乎适用于离散数据点。有没有办法将 GMM 与已经分箱或聚合成直方图的数据一起使用?

例如,以下代码是一种变通方法,它在拟合之前将分箱数据转换为离散数据点:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture

def fit_one_peak(x, linspace):
    gmm = mixture.GMM(n_components=1) # gmm for one components
    gmm.fit(x) # train it!
    m1 = gmm.means_
    w1 = gmm.weights_
    return np.exp(gmm.score_samples(linspace)[0]), m1[0][0], w1[0]

def convert_to_signal(d, s):
    c = []
    count = 0
    for i in s:
        for j in range(int(d[count])):  # No floats!
            c.append(i)
        count += 1
    return c

d = [0.5, 2, 5, 3, 1, 0.5]  # …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

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

在循环中使用 exec '继续'

任何人都可以解释为什么 usingpass在此代码中有效但continue会引发错误:SyntaxError: 'continue' not properly in loop

f = 'pass'  # Works
f = 'continue'  # Fails

for i in range(10):
    if i < 5:
        exec f
    print i
Run Code Online (Sandbox Code Playgroud)

只是为了提供一些上下文,我正在检查关键字是否可以存储在变量中:

def magic_print_i(f):
    for i in range(10):
        if i < 5:
            exec f
        if i % 3:
            continue
        print i

magic_print_i("continue")
Run Code Online (Sandbox Code Playgroud)

python

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

标签 统计

python ×7

rust ×4

cython ×2

list ×2

arrays ×1

list-comprehension ×1

numpy ×1

scikit-learn ×1