小编Rap*_*ael的帖子

如何获取两个24小时时间之间的差异?

pandas 有没有一种简单的方法来区分 24 小时时间,如下所示:

9:45 17:10
Run Code Online (Sandbox Code Playgroud)

相差 7 小时 25 分钟,即 445 分钟。

python pandas

6
推荐指数
1
解决办法
3437
查看次数

如何在 gcc 中为复数启用 SSE3 addsubps 自动向量化?

我有一个简单的循环,取 n 个复数的乘积。当我执行这个循环数百万次时,我希望它尽可能快。我知道可以使用 SSE3 和 gcc 内在函数快速完成此操作_mm_addsub_ps,但我感兴趣的是是否可以让 gcc 自动向量化这样的代码,即复数的乘积:

#include <complex.h>
complex float f(complex float x[], int n ) {
  complex float p = 1.0;
  for (int i = 0; i < n; i++)
    p *= x[i];
  return p;
}
Run Code Online (Sandbox Code Playgroud)

您获得的程序集gcc -S -O3 -ffast-math是:

        .file   "test.c"
        .section        .text.unlikely,"ax",@progbits
.LCOLDB2:
        .text
.LHOTB2:
        .p2align 4,,15
        .globl  f
        .type   f, @function
f:
.LFB0:
        .cfi_startproc
        testl   %esi, %esi
        jle     .L4
        leal    -1(%rsi), %eax
        pxor    %xmm2, %xmm2
        movss   .LC1(%rip), %xmm3
        leaq …
Run Code Online (Sandbox Code Playgroud)

c gcc sse complex-numbers auto-vectorization

6
推荐指数
1
解决办法
1514
查看次数

如何替换 Counter 以仅使用 numpy 代码

我有这个代码:

from collections import Counter
import numpy as np

def make_data(N):
    np.random.seed(40)
    g = np.random.randint(-3, 4, (N, N))
    return g


N = 100
g = make_data(N)
n = g.shape[0]

sum_dist = Counter()
for i in range(n):
    for j in range(n):
        dist = i**2 + j**2
        sum_dist[dist] += g[i, j]

sorted_dists = sorted(sum_dist.keys())
for i in range(1, len(sorted_dists)):
    sum_dist[sorted_dists[i]] += sum_dist[sorted_dists[i-1]]

# print(sum_dist)
print(max(sum_dist, key=sum_dist.get))
Run Code Online (Sandbox Code Playgroud)

输出为 7921。

我想将其转换为仅 numpy 代码并摆脱 Counter。我怎样才能做到这一点?

python numpy

6
推荐指数
1
解决办法
88
查看次数

用cython加速python代码

我有一个函数,它基本上只是调用一个简单的定义哈希函数,并测试它何时找到重复.我需要用它做很多模拟,所以希望它尽可能快.我试图用cython来做这件事.cython代码当前使用普通的python整数列表调用,其值在0到m ^ 2的范围内.

import math, random
cdef int a,b,c,d,m,pos,value, cyclelimit, nohashcalls   
def h3(int a,int b,int c,int d, int m,int x):
    return (a*x**2 + b*x+c) %m    
def floyd(inputx):
    dupefound, nohashcalls = (0,0)
    m = len(inputx)
    loops = int(m*math.log(m))
    for loopno in xrange(loops):
        if (dupefound == 1):
            break
        a = random.randrange(m)
        b = random.randrange(m)
        c = random.randrange(m)
        d = random.randrange(m)
        pos = random.randrange(m)
        value = inputx[pos]
        listofpos = [0] * m
        listofpos[pos] = 1
        setofvalues = set([value])
        cyclelimit = int(math.sqrt(m))
        for j …
Run Code Online (Sandbox Code Playgroud)

python optimization cython

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

最小设定覆盖范围

我想解决以下类型的最小集合覆盖问题。所有列表仅包含 1 和 0。

我说,如果你可以通过插入精确的符号来制作A列表,那么列表就覆盖了列表。 BBAx

考虑所有 2^n 个长度为 1 和 0 的列表n并设置x = n/3。我想计算一组最小长度的列表2n/3我会计算一组涵盖所有

这是我开始采用的一种幼稚的方法。对于每个可能的长度列表,2n/3我创建一组可以使用此函数(由 DSM 编写)从中创建的所有列表。

from itertools import product, combinations

def all_fill(source, num):
    output_len = len(source) + num
    for where in combinations(range(output_len), len(source)):
        # start with every possibility
        poss = [[0,1]] * output_len
        # impose the source list
        for w, s in zip(where, source):
            poss[w] = [s]
        # yield every remaining possibility
        for tup …
Run Code Online (Sandbox Code Playgroud)

python algorithm set-cover

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

返回 32(或 64)位的 python 哈希函数

我正在寻找一个返回 32(或 64)位的哈希函数。我尝试了 hashlib 中的 md5。例如:

import hashlib
hashlib.md5(b"H").hexdigest()
Run Code Online (Sandbox Code Playgroud)

给出

c1d9f50f86825a1a2302ec2449c17196

如果没有这样的哈希函数,是否可以从哈希中提取前32位?我试过:

st = hashlib.md5(b"H").hexdigest()
' '.join(format(x, 'b') for x in bytearray(st, 'utf-8'))
Run Code Online (Sandbox Code Playgroud)

将哈希转换为二进制,但它给出:

'1100011 110001 1100100 111001 1100110 110101 110000 1100110 111000 110110 111000 110010 110101 1100001 110001 1100001 110010 110011 110000 110010 1100101 1100011 110010 110100 110100 111001 1100011 110001 110111 110001 111001 110110'
Run Code Online (Sandbox Code Playgroud)

这不可能是正确的,因为它们都是以两个开始的。

python

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

对于这个简单的循环,为什么 cython 比 numba 慢得多?

我有一个简单的循环,仅对 numpy 数组的第二行求和。在 numba 我只需要做:

\n
from numba import njit\n@njit(\'float64(float64[:, ::1])\', fastmath=True)\n    def fast_sum_nb(array_2d):\n        s = 0.0\n        for i in range(array_2d.shape[1]):\n            s += array_2d[1, i]\n        return s\n
Run Code Online (Sandbox Code Playgroud)\n

如果我对代码进行计时,我会得到:

\n
In [3]: import numpy as np\nIn [4]: A = np.random.rand(2, 1000)\nIn [5]: %timeit fast_sum_nb(A)\n305 ns \xc2\xb1 7.81 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1,000,000 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n

要在 cython 中执行相同的操作,我需要首先 make setup.py ,其中包含:

\n
from setuptools import setup\nfrom Cython.Build import cythonize\nfrom setuptools.extension import Extension\n\next_modules = [\n …
Run Code Online (Sandbox Code Playgroud)

python gcc clang cython numba

5
推荐指数
2
解决办法
726
查看次数

为什么使用 dict 时 numba 慢 25%

我对使用 dict 时 numba 的性能感兴趣。我做了以下实验:

\n
from numpy.random import randint\nimport numba as nb\n\n@nb.njit\ndef foo_numba(a, b, c):\n    N = 100**2\n    d = {}\n    for i in range(N):\n        d[(randint(N), randint(N), randint(N))] = (a, b, c)\n    return d\n\n\n@nb.njit\ndef test_numba(numba_dict):\n    s = 0\n    for k in numba_dict:\n        s += numba_dict[k][2]\n    return s\n\n\n\ndef foo(a, b, c):\n    N = 100**2\n    d = {}\n    for i in range(N):\n        d[(randint(N), randint(N), randint(N))] = (a, b, c)\n    return d\n\n\n\ndef test(numba_dict):\n    s = 0\n    for k in numba_dict:\n        s += …
Run Code Online (Sandbox Code Playgroud)

python numba

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

如何在 Python 中从给定 CDF 的分布中采样

我想从CDF 的 1 - e^(-x^2)概率分布中抽取样本。

python/scipy/等中有没有方法?使您能够从仅给定 CDF 的概率分布中进行采样?

python math statistics scipy

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

如何让 catboost 可视化显示类别

考虑以下数据:

import pandas as pd
y_train = pd.DataFrame({0: {14194: 'Fake', 13891: 'Fake', 13247: 'Fake', 11236: 'Fake', 2716: 'Real', 2705: 'Real', 16133: 'Fake', 7652: 'Real', 7725: 'Real', 16183: 'Fake'}})

X_train = pd.DataFrame({'one': {14194: 'e',
  13891: 'b',
  13247: 'v',
  11236: 't',
  2716: 'e',
  2705: 'e',
  16133: 'h',
  7652: 's',
  7725: 's',
  16183: 's'},
 'two': {14194: 'a',
  13891: 'a',
  13247: 'e',
  11236: 'n',
  2716: 'c',
  2705: 'a',
  16133: 'n',
  7652: 'e',
  7725: 'h',
  16183: 'e'},
 'three': {14194: 's',
  13891: 'l',
  13247: 'n',
  11236: …
Run Code Online (Sandbox Code Playgroud)

python machine-learning catboost

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