pandas 有没有一种简单的方法来区分 24 小时时间,如下所示:
9:45 17:10
Run Code Online (Sandbox Code Playgroud)
相差 7 小时 25 分钟,即 445 分钟。
我有一个简单的循环,取 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) 我有这个代码:
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。我怎样才能做到这一点?
我有一个函数,它基本上只是调用一个简单的定义哈希函数,并测试它何时找到重复.我需要用它做很多模拟,所以希望它尽可能快.我试图用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) 我想解决以下类型的最小集合覆盖问题。所有列表仅包含 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) 我正在寻找一个返回 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)
这不可能是正确的,因为它们都是以两个开始的。
我有一个简单的循环,仅对 numpy 数组的第二行求和。在 numba 我只需要做:
\nfrom 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\nRun Code Online (Sandbox Code Playgroud)\n如果我对代码进行计时,我会得到:
\nIn [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)\nRun Code Online (Sandbox Code Playgroud)\n要在 cython 中执行相同的操作,我需要首先 make setup.py ,其中包含:
\nfrom setuptools import setup\nfrom Cython.Build import cythonize\nfrom setuptools.extension import Extension\n\next_modules = [\n …Run Code Online (Sandbox Code Playgroud) 我对使用 dict 时 numba 的性能感兴趣。我做了以下实验:
\nfrom 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) 我想从CDF 的 1 - e^(-x^2)概率分布中抽取样本。
python/scipy/等中有没有方法?使您能够从仅给定 CDF 的概率分布中进行采样?
考虑以下数据:
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)