请考虑以下两个片段:
#define ALIGN_BYTES 32
#define ASSUME_ALIGNED(x) x = __builtin_assume_aligned(x, ALIGN_BYTES)
void fn0(const float *restrict a0, const float *restrict a1,
float *restrict b, int n)
{
ASSUME_ALIGNED(a0); ASSUME_ALIGNED(a1); ASSUME_ALIGNED(b);
for (int i = 0; i < n; ++i)
b[i] = a0[i] + a1[i];
}
void fn1(const float *restrict *restrict a, float *restrict b, int n)
{
ASSUME_ALIGNED(a[0]); ASSUME_ALIGNED(a[1]); ASSUME_ALIGNED(b);
for (int i = 0; i < n; ++i)
b[i] = a[0][i] + a[1][i];
}
Run Code Online (Sandbox Code Playgroud)
当我编译函数时,gcc-4.7.2 -Ofast -march=native -std=c99 -ftree-vectorizer-verbose=5 -S …
我试图使用Sphinx来记录我的Python类.我这样做是使用autodoc:
.. autoclass:: Bus
:members:
Run Code Online (Sandbox Code Playgroud)
虽然它正确地获取我的方法的文档字符串,那些装饰:
@checkStale
def open(self):
"""
Some docs.
"""
# Code
Run Code Online (Sandbox Code Playgroud)
与@checkStale存在
def checkStale(f):
@wraps(f)
def newf(self, *args, **kwargs):
if self._stale:
raise Exception
return f(self, *args, **kwargs)
return newf
Run Code Online (Sandbox Code Playgroud)
有一个不正确的原型,如open(*args, **kwargs).
我怎样才能解决这个问题?我的印象是使用@wraps会修复这种事情.
我想知道ctypes包是否可以与mmap连接.
目前,我的模块分配一个缓冲区(with create_string_buffer),然后将其传递byref给我的库mylib.read函数.顾名思义,这将数据读入缓冲区.然后我调用file.write(buf.raw)将数据写入磁盘.然而,我的基准测试表明,这远远不是最佳状态(花费的file.write时间更好地花费在时间上mylib.read).
因此,我有兴趣知道ctypes是否可以与mmap互操作.给定一个mmap.mmap实例和一个偏移量我怎样才能将指针(c_void_p)带入地址空间?
我的库需要读入大端整数(4字节)并将它们转换为主机的字节序以进行处理.虽然on*nix ntohl在Windows下使用过,但ntohl需要使用Ws2_32.dll(Winsock).
这种依赖是我宁愿消除的依赖.最简单的方法似乎是编写我自己的endian-swapping函数(一个简单的练习,考虑到性能不是一个真正的问题).但是,这需要一种方法来确定我的库正在编译的系统的字节序(因此我可以#ifdef在大端系统上输出交换功能).
由于似乎没有标准的预处理器定义用于endianess,似乎有必要使用我的构建系统(cmake)来确定它.这样做的最佳方法是什么?(我厌倦了'编译一个测试文件并看到'类型解决方案,因为它们似乎会禁止交叉编译.)
我有一个整数维矩形平面.在这个平面内部,我有一组非交叉矩形(整数维和整数坐标).
我的问题是如何有效地找到该集的逆; 这是平面中未包含在子矩形中的部分.当然,这个点集合形成了一组矩形 - 这些是我感兴趣的.
我当前的天真解决方案使用布尔矩阵(平面的大小),并通过将点i,j设置为0来实现,如果它包含在子矩形内,则为1.然后我遍历矩阵的每个元素,如果它是1(自由),则试图从该点向外"生长"一个矩形.唯一性不是问题(任何合适的矩形都很好).
有没有哪种算法可以更有效地解决这个问题?(即,无需求助于布尔矩阵.
我希望编写一个模板结构foo,这foo<N>::value_type是最接近大小的整数(向上舍入)N.例如foo<32>::value_type => uint32_t,foo<33>::value_type => uint64_t和foo<72>::value_type => uint64_t.
要做到这一点,我需要一种优雅的方法来为foo一系列值提供部分特化,例如,1 <= N <= 8返回uint8_t等等等等.有没有办法完成这个,而不必专门从0到64的一切.
我有一个DataFrame有四列的熊猫A, B, C, D.事实证明,有时,价值B和C可能0.因此,我希望获得以下内容:
B[i] = B[i] if B[i] else min(A[i], D[i])
C[i] = C[i] if C[i] else max(A[i], D[i])
Run Code Online (Sandbox Code Playgroud)
我用来i表示在框架的所有行上运行的地方.使用Pandas,很容易找到包含零列的行:
df[df.B == 0] and df[df.C == 0]
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何轻松地执行上述转换.我可以想到各种效率低下且不优雅的方法(for整个框架上的循环),但并不简单.
我正在尝试使用ctypes包装一个C库。该库的一个功能是ondestroy回调,当该库返回的句柄即将被销毁时会调用该回调。
回调具有签名:
void cb(f *beingdestroyed);
Run Code Online (Sandbox Code Playgroud)
void *当库返回API时,该API允许将用户指定的内容与f 关联。因此,我可以关联用于将其包装为用户数据的py_object。我的计划是要有一个is_valid字段,当触发回调以提取user_data并将此字段设置为false时。
我的问题是如何着手提取我的高级知识py_object;我可以将用户数据转换为a ctypes.void_p并转换为a,ctypes.py_object但是随后我只有Python C API可以使用。可以通过写入将内容转发到我可以使用的高级对象user_object.is_valid = 0。
我Decimal在Python中有一些实例.我希望将它们格式化
Decimal('1') => '1.00'
Decimal('12.0') => '12.00'
Decimal('314.1') => '314.10'
Decimal('314.151') => '314.151'
Run Code Online (Sandbox Code Playgroud)
因此确保总是至少有两个小数位,可能更多.虽然不存在舍入到n小数位的解决方案,但我找不到确定数字下限的简洁方法.
我目前的解决方案是计算:
first = '{}'.format(d)
second = '{:.2f}'.format(d)
Run Code Online (Sandbox Code Playgroud)
并采取两者中的哪一个更长.然而,它看起来有点hackish.
我有一个N三维点的集合.这些存储为np.array具有的形状(N,3).所有点都是不同的,任何两点之间的最小距离~1e-5.我正在寻找一种获得迭代这些点的顺序的方法,这些顺序既与它们当前的顺序无关,np.array又与单个组件的小扰动无关.
满足第一个要求的最简单方法是np.lexsort使用
np.lexsort(my_array.T)
Run Code Online (Sandbox Code Playgroud)
但是在健壮性部门失败了:
In [6]: my_array = np.array([[-0.5, 0, 2**0.5], [0.5, 0, 2**0.5 - 1e-15]])
In [7]: my_array[np.lexsort(my_array.T)]
Out[7]:
array([[ 0.5 , 0. , 1.41421356],
[-0.5 , 0. , 1.41421356]])
Run Code Online (Sandbox Code Playgroud)
我们可以看到,在这种情况下,排序对扰动非常敏感.因此,我正在寻找一个模糊变量,np.lexsort如果一个轴中的两个值在公差范围内,它将移动到下一个轴epsilon.(或任何可以让我获得订购的替代机制.)
由于我的应用程序有数百万个这些集合,所有这些都需要订购,性能是一个值得关注的问题(这就是为什么我没有盲目地试图推出我自己的容忍np.lexsort而没有先看到是否有更好的方法来做它).
I have been using the following snippet to silence (redirect output from) C code called in my Python script:
from ctypes import CDLL, c_void_p
import os
import sys
# Code
class silence(object):
def __init__(self, stdout=os.devnull):
self.outfile = stdout
def __enter__(self):
# Flush
sys.__stdout__.flush()
# Save
self.saved_stream = sys.stdout
self.fd = sys.stdout.fileno()
self.saved_fd = os.dup(self.fd)
# Open the redirect
self.new_stream = open(self.outfile, 'wb', 0)
self.new_fd = self.new_stream.fileno()
# Replace
os.dup2(self.new_fd, self.fd)
def __exit__(self, *args):
# Flush
self.saved_stream.flush()
# Restore
os.dup2(self.saved_fd, self.fd) …Run Code Online (Sandbox Code Playgroud) 我有一个datetime.datetime实例,d一个datetime.timedelta实例td,我正在尝试编写一个函数,它将范围(d, d+td)分解[(d,x1),(x1,x2),...,(xn,d+td)]为xn变量全部与小时对齐.
例如,如果
d = datetime.datetime(2012, 9, 8, 18, 53, 34)
td = datetime.timedelta(hours=2, minutes=34, seconds=5)
Run Code Online (Sandbox Code Playgroud)
我想要一份清单
[(datetime.datetime(..., 18, 53, 34), datetime.datetime(..., 19, 0, 0)),
(datetime.datetime(..., 19, 0, 0), datetime.datetime(..., 20, 0, 0)),
(datetime.datetime(..., 20, 0, 0), datetime.datetime(..., 21, 0, 0)),
(datetime.datetime(..., 21, 0, 0), datetime.datetime(..., 21, 27, 39))]
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一个很好的,Pythonic,完成这个的方法?
我有以下正则表达式,我用它来查找字符串中的数字
-?\d*\.?\d+([eE][-+]?\d+)?
Run Code Online (Sandbox Code Playgroud)
并希望修改它,使其只匹配浮点数而不是整数.造成这种情况的标准(尽我可以分辨)是这场比赛必须具备的至少一个:.,e,E.但是,我想不出一个很好的方法将这个要求纳入正则表达式而不重复大部分正文.
重复
经过一些搜索,我遇到正则表达式匹配浮点数但不是整数,虽然没有明确标题是这个问题的完全重复(包括soln).