有人可以解释为什么我不能用于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列表发送到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列表?
我想知道是否可以.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) 我试图了解如何将范围与迭代器一起使用。如果我声明一个范围并将其与迭代器一起使用,是否可以与另一个迭代器一起重复使用该范围?例如,这不会编译:
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) 我刚刚开始学习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函数,它基本上只需要一行文本并检查子行的行.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) 我试图使用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中生成密钥?如果这是一个复杂的过程,有人能指出一个很好的例子吗?
我只是想了解列表理解过程中发生了什么.在列表理解中应用时,一些在"就地"列表上工作的方法似乎不起作用:
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)
我猜这与被复制到不同内存空间的所有元素有关.为什么 …
在 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) 任何人都可以解释为什么 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)