标签: vectorization

R中的编码实践:不同风格的优缺点是什么?

最近关于使用require与::的问题引发了关于在R中编程时使用哪种编程风格的问题,以及它们的优点/缺点.浏览源代码或在网上浏览,您会看到许多不同的样式显示.

我的代码中的主要趋势:

  • 重度矢量化我使用索引(和嵌套索引)玩了很多,这有时会产生相当模糊的代码,但通常比其他解决方案快得多.例如:x[x < 5] <- 0而不是x <- ifelse(x < 5, x, 0)

  • 我倾向于嵌套函数以避免使用我需要清理的临时对象来重载内存.特别是对于操纵大型数据集的函数,这可能是一个真正的负担.例如:y <- cbind(x,as.numeric(factor(x)))而不是y <- as.numeric(factor(x)) ; z <- cbind(x,y)

  • 我编写了很多自定义函数,即使我只在例如一次使用代码.一个sapply.我相信它可以让它更容易阅读,而不会产生可以保持躺着的物体.

  • 不惜一切代价避免循环,因为我认为矢量化更清洁(更快)

然而,我注意到对此的看法不同,有些人倾向于背弃他们所谓的"Perl"编程方式(甚至是"Lisp",所有这些括号都在我的代码中飞来飞去.我不知道虽然走得那么远.

您认为R中的良好编码实践是什么?

您的编程风格是什么,您如何看待它的优缺点?

coding-style r vectorization

34
推荐指数
3
解决办法
4430
查看次数

英特尔SSE和AVX示例和教程

是否有用于学习英特尔SSE和AVX指令的优秀C/C++教程或示例?

我在微软MSDN和英特尔网站上发现很少,但从基础知识中理解它会很棒.

sse intel vectorization avx

34
推荐指数
2
解决办法
2万
查看次数

GCC:两个相似循环之间的矢量化差异

在编译时gcc -O3,为什么以下循环没有矢量化(自动):

#define SIZE (65536)

int a[SIZE], b[SIZE], c[SIZE];

int foo () {
  int i, j;

  for (i=0; i<SIZE; i++){
    for (j=i; j<SIZE; j++) {
      a[i] = b[i] > c[j] ? b[i] : c[j];
    }
  }
  return a[0];
}
Run Code Online (Sandbox Code Playgroud)

什么时候呢?

#define SIZE (65536)

int a[SIZE], b[SIZE], c[SIZE];

int foov () {
  int i, j;

  for (i=0; i<SIZE; i++){
    for (j=i; j<SIZE; j++) {
      a[i] += b[i] > c[j] ? b[i] : c[j];
    }
  }
  return a[0];
}
Run Code Online (Sandbox Code Playgroud)

唯一的区别在于内部循环中的表达式的结果是 …

c gcc loops vectorization compiler-optimization

33
推荐指数
1
解决办法
2816
查看次数

用Scipy计算行方式点积两个矩阵的矢量化方式

我想尽可能快地计算相同维度的两个矩阵的行方点积.这就是我这样做的方式:

import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[1,2,3], [1,2,3]])
result = np.array([])
for row1, row2 in a, b:
    result = np.append(result, np.dot(row1, row2))
print result
Run Code Online (Sandbox Code Playgroud)

当然输出是:

[ 26.  14.]
Run Code Online (Sandbox Code Playgroud)

numpy vectorization scipy matrix-multiplication dot-product

32
推荐指数
4
解决办法
3万
查看次数

在返回向量的函数上使用Numpy Vectorize

numpy.vectorize 取函数f:a-> b并将其变为g:a [] - > b [].

这在标量ab标量时都可以正常工作,但是我想不出为什么它不能用b作为ndarray或列表,即f:a-> b []和g:a [] - > b [] []

例如:

import numpy as np
def f(x):
    return x * np.array([1,1,1,1,1], dtype=np.float32)
g = np.vectorize(f, otypes=[np.ndarray])
a = np.arange(4)
print(g(a))
Run Code Online (Sandbox Code Playgroud)

这会产生:

array([[ 0.  0.  0.  0.  0.],
       [ 1.  1.  1.  1.  1.],
       [ 2.  2.  2.  2.  2.],
       [ 3.  3.  3.  3.  3.]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

好的,所以给出了正确的值,但错误的dtype.更糟糕的是:

g(a).shape
Run Code Online (Sandbox Code Playgroud)

收益率:

(4,)
Run Code Online (Sandbox Code Playgroud)

所以这个阵列几乎没用.我知道我可以将其转换为:

np.array(map(list, a), dtype=np.float32)
Run Code Online (Sandbox Code Playgroud)

给我我想要的东西:

array([[ 0., …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy vectorization

31
推荐指数
3
解决办法
4万
查看次数

方向两点

一些高中数学概念已被遗忘,所以我在这里问.

如果我有两点p1(x1,y1),p2(x2,y2)的方向P1-->p2,这是p1指向p2.由向量表示这个方向,它是Vector(x2-x1,y2-y1)Vector(x1-x2, y1-y2)

顺便说一下,规范化矢量的目的是什么?

math vector vector-graphics vectorization

31
推荐指数
2
解决办法
5万
查看次数

是否有矢量化并行max()和min()?

我有一个data.frame列"a"和"b".我想添加名为"high"和"low"的列,其中包含a和b列中的最高和最低.

有没有办法在没有循环数据框中的行的情况下执行此操作?

编辑:这是针对OHLC数据的,因此高和低列应包含同一行上a和b之间的最高和最低元素,而不是整列.对不起,如果措辞不好.

parallel-processing r max vectorization minimum

31
推荐指数
1
解决办法
1万
查看次数

"缓存中间结果"是什么意思?

我有一组n个向量存储在3 xn矩阵中z.我找到了外用产品np.einsum.当我使用时间计时:

%timeit v=np.einsum('i...,j...->ij...',z,z)
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

The slowest run took 7.23 times longer than the fastest. This could mean that an
intermediate result is being cached 
100000 loops, best of 3: 2.9 µs per loop
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,可以避免吗?最好的3是2.9us,但最慢可能更典型.

benchmarking numpy vectorization ipython

31
推荐指数
1
解决办法
4806
查看次数

是否有可能对NumPy数组进行递归计算,其中每个元素依赖于前一个元素?

T(i) = Tm(i) + (T(i-1)-Tm(i))**(-tau(i))
Run Code Online (Sandbox Code Playgroud)

Tm并且tau是先前已经计算过的具有相同长度的NumPy向量,并且期望创建新向量T.在i它只是为了说明什么是想要的元素索引.

这种情况需要for循环吗?

python numpy vectorization

30
推荐指数
4
解决办法
5532
查看次数

numpy中frompyfunc和vectorize之间的区别

numpy中vectorizefrompyfunc有什么区别?

两者看起来非常相似.每个人的典型用例是什么?

编辑:正如JoshAdel所指出的,这个课程vectorize似乎是建立在上面的frompyfunc.(见来源).我还不清楚是否frompyfunc可能有任何未被vectorize...... 覆盖的用例

python arrays numpy vectorization

30
推荐指数
3
解决办法
4134
查看次数