- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我对问题标题不明确表示歉意:原因是我无法识别工作中的数学过程。
简而言之,情况如下:
这是我的操作方法,
import numpy as np
def distLstSq(f1,f2):
"Return the least square distance between f1 and f2 per unit element"
return np.sum(np.square(np.subtract(f1,f2)))/len(f1)
f1 = np.arange(100)
f2 = np.random.random_integers(1,100,5)
nBuf = len(f2)
dist = np.empty(len(f1)-nBuf)
for i in range(len(f1)-nBuf):
temp = f1[i:i+nBuf]
dist[i] = distLstSq(temp,f2)
但是,由于向量 f1 很大(从 4MB 的文件生成),我想知道是否没有更优雅的 pythonic 解决方案,使用更少的 CPU 资源,在更短的时间内。可能是一种“减法卷积”,其中 f2 按元素在 f1 上滑动,每一步都进行减法运算。
非常感谢您的投入!
伯特兰
最佳答案
首先,我想指出,dist
中的项数不是len(f1)-nBuf
,而是len(f1)-nBuf+ 1.
.这就是较短向量与较长向量完全重叠的方式。
忽略除以 len(f1)
(这只是按常数缩放),您将为 f2 的每个切片计算以下内容:
所以我认为你可以通过一些预计算来减少操作数量。我们还可以使用 np.convolve 来查找交叉项。
f1_squared = f1**2
f2_squared_sum = np.sum(f2**2)
nBuf = len(f2)
cross_terms = -2*np.convolve(f1, f2[::-1], "valid")
# reverse f2 to get what we want.
# "valid" returns where vectors completely overlap
squared_distance = [f2_squared_sum + np.sum(f1_squared[i:i+nBuf]) + cross_terms[i]
for i in xrange(len(cross_terms))]
mean_squared_distance = np.array(squared_distance)/nBuf
您的版本:
nBuf = len(f2)
dist = np.empty(len(f1)-nBuf+1)
for i in xrange(len(f1)-nBuf+1):
temp = f1[i:i+nBuf]
dist[i] = distLstSq(temp,f2)
基于 timeit.timeit
,我的版本快了 30-50%。
通过优化np.sum(f1_squared[i:i+nBuf])
可以进一步提高性能,因为这涉及重复操作。应该有一些分而治之的方法来求和。
我也认为scipy.signal.fftconvolve可以比 np.convolve 更快,但这取决于较短向量 (see here) 的长度
关于python - Python中的串行向量减法或 "subtractive convolution"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37572822/
它改变 (a b c d (1 2 |3 4) ha ha ha) 进入 |(1 2 (a b c d 3 4 ha ha ha)) 这种转换有什么用? 最佳答案 严格来说,它用于反转内部表达式的嵌套
我一直在编码 this example TensorFlow 中的卷积网络,我对这种权重分配感到困惑: weights = { # 5x5 conv, 1 input, 32 outputs 'wc1
我以前几次遇到过这个短语,主要是在神经网络和 tensorflow 的背景下,但我的印象是它更普遍,并不局限于这些环境。 here例如,他们说这个“卷积预热”过程需要大约 10k 次迭代。 为什么卷积
首先,我对问题标题不明确表示歉意:原因是我无法识别工作中的数学过程。 简而言之,情况如下: 我有两个长度不同的向量:f1 和 f2。 我想按元素计算 f1 和 f2 之间的最小平方距离。 这是我的操作
我在 Keras 中声明输入层时收到此错误消息。 ValueError: Negative dimension size caused by subtracting 3 from 1 for 'con
我正在尝试在 PyTorch 中计算每 channel 梯度图像。为此,我想在图像的每个 channel 上使用 Sobel 滤波器执行标准 2D 卷积。我正在使用 torch.nn.function
我对 AlexNet 和 VGG 有很好的理解。我可以根据各自论文中提交的内容来验证每一层中使用的参数数量。 然而,当我尝试在 GoogleNet 论文“Going Deeper With COnvo
我不确定以下内容是否足够复杂或过于复杂。 它基本上归结为一个相互关联的类和接口(interface)。 (见下文)建议表示赞赏.... /** * @param item type * @par
我使用 astropy.convolution.Gaussian2DKernel 创建了一个卷积核。我可以绘制内核,但我不知道如何将其保存为 .fits 图像。 (Galfit 稍后在工作流程中需要它
完整错误: UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to in
我看到了这些幻灯片,Kim 关于 CNN 使用 word2vec 的演示: http://www.people.fas.harvard.edu/~yoonkim/data/Kim_EMNLP_2014
我正在尝试在 Python 中运行一些神经网络代码。我在 Google Colab 上运行得很好。然后,我将代码移至远程计算机 GPU 上的 Jupyter Notebook。 它运行正常,直到我尝试
在使用 Keras 和 Jupyter Notebook 时,一旦开始训练模型,我偶尔会收到错误(请参阅下面的完整错误日志)。而Failed to get convolution algorithm.
我花了一些时间才明白input_shape = (batch_size, steps, input_dim)在 Keras Conv1D 中,但到目前为止我无法取得任何进展。 更具体地说,我有 2 个
我正在尝试使用 astropy 模块来平滑我的数据。作为一维示例,我尝试了以下代码: import numpy as np from astropy import convolution as con
我正在通过官方书籍学习 Rust。我在我的程序中遇到了一个奇怪的语法: pub struct Shelf { items: Vec>, // => working as expected
我正在用以下函数编写卷积的 C++ 实现 vector Conv(vector a, vector b) { // a and b are the same size int n =
我已经在名为 tensorenv 的 anaconda 环境中安装了 tensorflow,为了测试安装,我尝试运行其中一个示例 convolutional.py,然后出现以下结果。 Initiali
我有一个我生成的内核过滤器,我想将它应用到我的图像,但我无法通过这样做获得正确的结果:实际上我也可以使用不同的方法,因为我不熟悉 opencv 我需要帮助谢谢。 channel[c]为读取图像; in
我有以下硬件/软件: NVIDIA RTX2060 6GB 库达10 我想运行Keras mnist example 。在我的另一台计算机上,可以使用相同的软件。我收到此错误: tensorflow.
我是一名优秀的程序员,十分优秀!