我想使用正则表达式过滤python中的字符串列表.在以下情况中,仅保留扩展名为".npy"的文件.
代码不起作用:
import re
files = [ '/a/b/c/la_seg_x005_y003.png',
'/a/b/c/la_seg_x005_y003.npy',
'/a/b/c/la_seg_x004_y003.png',
'/a/b/c/la_seg_x004_y003.npy',
'/a/b/c/la_seg_x003_y003.png',
'/a/b/c/la_seg_x003_y003.npy', ]
regex = re.compile(r'_x\d+_y\d+\.npy')
selected_files = filter(regex.match, files)
print(selected_files)
Run Code Online (Sandbox Code Playgroud)
同样的正则表达式在Ruby中适用于我:
selected = files.select { |f| f =~ /_x\d+_y\d+\.npy/ }
Run Code Online (Sandbox Code Playgroud)
Python代码有什么问题?
我想分配一个大的DMA缓冲区,大小约为40 MB.当我使用时dma_alloc_coherent(),它失败了,我看到的是:
------------[ cut here ]------------
WARNING: at mm/page_alloc.c:2106 __alloc_pages_nodemask+0x1dc/0x788()
Modules linked in:
[<8004799c>] (unwind_backtrace+0x0/0xf8) from [<80078ae4>] (warn_slowpath_common+0x4c/0x64)
[<80078ae4>] (warn_slowpath_common+0x4c/0x64) from [<80078b18>] (warn_slowpath_null+0x1c/0x24)
[<80078b18>] (warn_slowpath_null+0x1c/0x24) from [<800dfbd0>] (__alloc_pages_nodemask+0x1dc/0x788)
[<800dfbd0>] (__alloc_pages_nodemask+0x1dc/0x788) from [<8004a880>] (__dma_alloc+0xa4/0x2fc)
[<8004a880>] (__dma_alloc+0xa4/0x2fc) from [<8004b0b4>] (dma_alloc_coherent+0x54/0x60)
[<8004b0b4>] (dma_alloc_coherent+0x54/0x60) from [<803ced70>] (mxc_ipu_ioctl+0x270/0x3ec)
[<803ced70>] (mxc_ipu_ioctl+0x270/0x3ec) from [<80123b78>] (do_vfs_ioctl+0x80/0x54c)
[<80123b78>] (do_vfs_ioctl+0x80/0x54c) from [<8012407c>] (sys_ioctl+0x38/0x5c)
[<8012407c>] (sys_ioctl+0x38/0x5c) from [<80041f80>] (ret_fast_syscall+0x0/0x30)
---[ end trace 4e0c10ffc7ffc0d8 ]---
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的值,它看起来dma_alloc_coherent()不能分配超过2 ^ 25字节(32 MB).
如何分配如此大的DMA缓冲区?
我正在寻找使用NEON内在函数来测试128 NEON寄存器是否包含全零的最快方法.我目前正在使用3个OR操作和2个MOV:
uint32x4_t vr = vorrq_u32(vcmp0, vcmp1);
uint64x2_t v0 = vreinterpretq_u64_u32(vr);
uint64x1_t v0or = vorr_u64(vget_high_u64(v0), vget_low_u64(v0));
uint32x2_t v1 = vreinterpret_u32_u64 (v0or);
uint32_t r = vget_lane_u32(v1, 0) | vget_lane_u32(v1, 1);
if (r == 0) { // do stuff }
Run Code Online (Sandbox Code Playgroud)
这通过gcc转换为以下汇编代码:
VORR q9, q9, q10
VORR d16, d18, d19
VMOV.32 r3, d16[0]
VMOV.32 r2, d16[1]
VORRS r2, r2, r3
BEQ ...
Run Code Online (Sandbox Code Playgroud)
有没有人有更快的方法?
我正在寻找一种优雅的方法来获取包含两个数组之间的最大值的数组.
意思是有两个数组:
a = [1, 5, 9]
b = [3, 2, 11]
Run Code Online (Sandbox Code Playgroud)
结果应该是:
=> [3, 5, 11]
Run Code Online (Sandbox Code Playgroud)
假设两个阵列的大小相同.
我使用的代码不像Ruby那样做任务:
c = Array.new(a.size)
for i in 0...a.size
c[i] = [a[i], b[i]].max
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试将16位灰度PNG转换为原始文件.图像尺寸为640*480.
首先,确定:
$ identify image.png
image.png PNG 640x480 640x480+0+0 16-bit PseudoClass 65536c 299KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
我期待结果文件的大小为640*480*2字节.
尝试1:
$ convert image.png -depth 16 image.raw
Run Code Online (Sandbox Code Playgroud)
这给出了330805字节的文件大小.它的前16个字节看起来像:
0x00000000: 89504E47 0D0A1A0A 0000000D 49484452 .PNG........IHDR
Run Code Online (Sandbox Code Playgroud)
尝试2:
$ convert image.png -depth 16 image.rgb
Run Code Online (Sandbox Code Playgroud)
这给出了1843200字节的文件大小,即640*480*2*3.
我在Ubuntu 14.04上运行imagemagick版本6.7.7-10.
有任何想法吗?
我在 GitLab 中遇到了 10 个项目的限制。我查了一下/etc/gitlab/gitlab.rb,没有找到提及该数字或限制的内容。
如何更改每人 10 个项目的限制?
我在 Ubuntu 14.04 上运行 GitLab CE 7.10.1-omnibus.2。
我建设,我想使用可以之一的各种参数来配置类:int,double和string(或const char *为此事).在像Ruby这样的语言中,我将构建一个初始化函数,该函数接受由字符串键入的哈希值.例如:
class Example
def init_with_params params
puts params
end
end
e = Example.new
e.init_with_params({ "OutputFile" => "/tmp/out.txt", "CaptureFPS" => 25.0, "RetryDelaySeconds" => 5 })
Run Code Online (Sandbox Code Playgroud)
如何在C++中创建类似的行为?
环顾四周,我发现了几个帖子在谈论boost::variant.我宁愿避免使用boost如果通过将不同类型限制为上面提到的3种类型,可以制作一个相当干净的解决方案.
编辑:我同意使用经过精心设计和广泛测试的代码(如Boost.Variant)比重新实现相同的想法要好得多.在这种情况下,问题减少到只使用3种基本类型,所以我一直在寻找最简单的实现方法.