我有很多文本需要处理有效的URL.
输入是模糊的HTMLish,因为它主要是HTML.但是,它并不是真正有效的 HTML.
我一直试图用正则表达式来解决问题.
在您说(或可能是尖叫 - 我已经阅读其他HTML +正则表达式问题)之前" 使用解析器 ",您需要考虑一件事:
我使用的文件大小约为5 GB
我不知道任何解析器能够在不失败的情况下处理它,或者花费数天时间.此外,虽然文本内容主要是 html,但不一定是有效的 HTML,这意味着它需要一个非常宽容的解析器.最后,并非所有链接都必须在<a>标签中(有些可能只是明文).
鉴于我并不真正关心文档结构,是否有更好的替代方案WRT提取链接?
现在我正在使用正则表达式:(
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))在grep -E中)
但即便如此,我放弃了它让它运行了大约3个小时.
Regex引擎性能有显着差异吗?我正在使用MacOS的命令行grep.如果有其他兼容的实现具有更好的性能,那么这可能是一种选择.
我不太关心语言/平台,虽然MacOS /命令行会很好.
我正在 32 位 ARM mcu(Atmel SAM4SD32C,Cortex-M4/ARMv7E-M 部件)上实现二进制日志系统,并且正在设计我的数据结构。我的目标是将日志格式描述为打包结构,并简单地将结构与字符数组结合起来,用于写入日志设备(在本例中是通过 FatFS 的 SD 卡)。
基本上,我有一个非常简单的结构:
typedef struct adc_samples_t
{
int32_t adc_samples[6];
uint64_t acq_time;
int8_t overrun;
uint8_t padding_1;
uint8_t padding_2;
uint8_t padding_3;
} __attribute__((packed, aligned(4))) adc_sample_set;
Run Code Online (Sandbox Code Playgroud)
现在,我的架构是32位的,据我了解,访问任何成员/其他/那么该overrun成员应该是32位对齐的,因此不会有额外的开销。此外,该aligned(4)属性应强制结构体的任何实例化位于 32 位对齐的边界上。
然而,编译上面的结构定义会产生一堆警告:
In file included from ../src/main.c:13:0:
<snip>\src\fs\fs-logger.h(10,10): warning: packed attribute causes inefficient alignment for 'adc_samples' [-Wattributes]
int32_t adc_samples[6];
^
<snip>\src\fs\fs-logger.h(12,11): warning: packed attribute causes inefficient alignment for 'acq_time' [-Wattributes]
uint64_t acq_time;
Run Code Online (Sandbox Code Playgroud)
据我所知(我现在意识到这是一个很大的假设),我假设 32 位对齐是在 32 位臂上实现最佳组件定位所需的全部内容。奇怪的是,唯一/不/产生警告的成员是overrun和padding_X成员,我不明白其原因。 …
这可能是一个愚蠢的问题,但我对 ARM CMSIS 缓存操作函数的措辞有些困惑。
ARM CMSIS 公开了可以“清除”缓存的函数、可以“使”缓存无效的函数,以及一组同时执行这两种操作的函数。
这些实际上做什么还不清楚,坦率地说,arm 文档让我感到困惑:
- 您可以在一次操作中使整个数据缓存(刷新数据缓存)无效,而无需回写脏数据。
- 您可以在不写回任何脏数据的情况下使单个行无效(刷新数据缓存单个条目)。
- 您可以逐行执行清洁。数据只有在遇到脏行时才通过写缓冲区写回,清除后的行保留在缓存中(clean data cache single entry)。您可以使用它们在数据缓存中的索引或它们在内存中的地址来清理缓存行。
- 您可以在一次操作中清理和刷新单个行,使用它们在数据缓存中的索引或它们在内存中的地址。
我的理解是,缓存中的“刷新”数据将导致其被写回主内存,而缓存中的“无效”数据将导致处理器在下次尝试访问相关数据时重新读取主内存。
然而,ARM 文档似乎暗示刷新操作实际上是一个失效操作,而我一直在想的是刷新操作实际上是一个“干净”操作。
我想我只是严重误解了文档。有人可以指出我正确的方向吗?
如果相关,我专门为皮质 M7 开发。
我正在尝试包装一些使用带有构造函数的结构的 C++ 代码,但不知道如何包装。
C++结构:
typedef struct point_3d_t
{
double x;
double y;
double z;
point_3d_t(double x, double y, double z)
: x(x)
, y(y)
, z(z)
{}
} point_3d;
Run Code Online (Sandbox Code Playgroud)
Cython 包装器:
cdef extern from "./cppdar.hpp":
ctypedef struct point_3d:
point_3d(double, double, double)
double x;
double y;
double z;
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够通过类似的方式cdef point_3d p1(v, v, v)(从 cython 文件中)构造结构,但我似乎无法弄清楚如何让 cython 仅使用提供的构造函数。
我试过了:
cdef point_3d p1(v, v, v)cdef point_3d p1 = point_3d(v, v, v)cdef point_3d p1(0, 0, 0)cdef point_3d …基本上,在python中存储和使用密集矩阵的最佳方法是什么?
我有一个项目,可以在数组中的每个项目之间生成相似度量.
每个项目都是一个自定义类,并存储一个指向另一个类的指针和一个表示它与该类"紧密"的数字.
现在,它的工作效果非常好,约为8000件,之后失败并出现内存错误.
基本上,如果您假设每个比较使用〜30(看起来准确基于测试)字节来存储相似性,则意味着所需的总内存为:
numItems^2 * itemSize = Memory
因此内存使用量是基于项目数的指数.
在我的例子中,每个链接的内存大小约为30个字节,因此:
8000 * 8000 * 30 = 1,920,000,000 bytes, or 1.9 GB
这是单个线程的内存限制.
在我看来,必须有一种更有效的方法来做到这一点.我已经看过了memmapping,但是为了生成相似度值已经计算密集了,并且通过硬盘驱动器将其瓶颈似乎有点荒谬.
编辑
我看着numpy和scipy.不幸的是,它们也不支持非常大的阵列.
>>> np.zeros((20000,20000), dtype=np.uint16)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
>>>
Run Code Online (Sandbox Code Playgroud)
进一步编辑
Numpy似乎很受欢迎.然而,numpy不会真正做我想要的,至少没有另一个抽象层.
我不想存储数字,我想存储类的引用.Numpy支持对象,但这并不能解决数组大小问题.我长大numpy的,就像什么例子不工作.
有什么建议?
编辑好吧,我结束了刚刚重写所有的逻辑,使其不再存储任何冗余的值,从降低内存使用率O*n^2来O*((n*(n-1))/2).
基本上,整个事件是握手问题的一个版本,所以我已经从存储所有链接切换到每个链接的单个版本.
这不是一个完整的解决方案,但我通常没有足够大的数据集来溢出它,所以我认为它会成功.PyTables真的很有趣,但我不知道任何SQL,并且似乎没有任何好的传统切片或基于索引的方式来访问表数据.我将来可能会重新审视这个问题.
我正在使用Python和Numpy/Scipy进行一些数字滤波器工作.
我正在使用scipy.signal.iirdesign来生成我的滤波器系数,但它需要以我不熟悉的格式使用滤波器通带系数
wp, ws : float
Passband and stopband edge frequencies, normalized from 0 to 1 (1 corresponds
to pi radians / sample).
For example:
Lowpass: wp = 0.2, ws = 0.3
Highpass: wp = 0.3, ws = 0.2
Run Code Online (Sandbox Code Playgroud)
(从这里)
我不熟悉数字滤波器(我来自硬件设计背景).在模拟环境中,我将确定所需的斜率和3db向下点,并从中计算组件值.
在这种情况下,如何获取已知的采样率,所需的转角频率和所需的滚降,并wp, ws从中计算出值?
(这可能更适合math.stackexchange.我不确定)
我正在开发一个涉及boost::beastwebsocket/http混合服务器的项目,该服务器运行在上面boost::asio.我的项目advanced_server.cpp源于示例源代码.
它工作正常,但现在我正在尝试添加一项功能,该功能需要向所有连接的客户端发送消息.
我不是很熟悉boost::asio,但是现在我看不到有任何方式可以播放"广播"事件(如果这是正确的术语).
我天真的方法是看看我是否可以构造websocket_session()附加类似事件监听器的东西,并且析构函数会分离监听器.此时,我可以触发事件,并使所有当前有效的websocket会话(websocket_session()作用域的生命周期)执行回调.
有/sf/answers/1192031571/,它或多或少地做了我想要的(ab)使用a boost::asio::steady_timer,但这似乎是一种可怕的黑客来完成应该非常简单的事情.
基本上,给定一个有状态boost::asio服务器,我如何在多个连接上进行操作?
我正在尝试对android / JNI进行一些性能分析。
如何生成用于测试的发行版本?
我知道这是有可能的,因为我已经成功生成了一个二进制文件并执行了它,而没有通过Android.mk文件进行任何签名,但是我正尝试移至android studio,并且它不会让我生成测试构建。在关键字段中输入垃圾似乎无效
这只是一个测试项目,目的是验证我能否获得所需的性能。它永远不会分发,也不会在我办公桌上的任何设备上运行。
我可以完全关闭所有代码验证功能吗?我现在正在进行验证,并且该项目的最终用途是非互联网连接的设备,该设备被视为黑盒设备。
android signing android-studio android-gradle-plugin android-signing
我有一种情况,我试图将一些大的,复杂的python例程移植到线程环境.
我希望能够在每个调用的基础上将函数print声明的输出重定向到其他地方(logging.Logger具体而言).
我真的不想修改我正在编译的代码的源代码,因为我需要保持与调用这些模块的其他软件的向后兼容性(这是单线程的,并通过简单地抓取写入的所有内容来捕获输出sys.stdout).
我知道最好的选择是做一些重写,但我真的没有选择.
编辑 -
或者,有什么方法可以覆盖打印的本地定义以指向不同的功能?
然后,我可以定义本地print = system print,除非被kwarg覆盖,并且只涉及在每个例程的开头修改几行.
python ×4
arm ×2
python-2.6 ×2
struct ×2
32-bit ×1
android ×1
boost ×1
boost-asio ×1
c ×1
c++ ×1
cortex-m ×1
cython ×1
gcc ×1
html ×1
large-files ×1
matrix ×1
regex ×1
scipy ×1
signing ×1
windows-xp ×1