标签: vectorization

如何将SIMD int向量转换为在GCC中浮动?

我正在为一个项目使用GCC SIMD向量扩展,一切都很好但是转换,它们只是重置向量的所有组件.

手动状态:

可以从一种向量类型转换为另一种向量类型,前提是它们具有相同的大小(实际上,您也可以将向量转换为相同大小的其他数据类型).

这是一个简单的例子:

#include <stdio.h>

typedef int int4 __attribute__ (( vector_size( sizeof( int ) * 4 ) ));
typedef float float4 __attribute__ (( vector_size( sizeof( float ) * 4 ) ));

int main()
{
    int4 i = { 1 , 2 , 3 , 4 };
    float4 f = { 0.1 , 0.2 , 0.3 , 0.4 };

    printf( "%i %i %i %i\n" , i[0] , i[1] , i[2] , i[3] );
    printf( "%f %f %f …
Run Code Online (Sandbox Code Playgroud)

c gcc simd vectorization

7
推荐指数
1
解决办法
2523
查看次数

如何加速或矢量化for循环?

我想通过矢量化或使用Data.table或其他方法来提高for循环的速度.我必须在1,000,000行上运行代码,我的代码非常慢.

代码是相当不言自明的.我在下面提供了一个解释,以防万一.我已经包含了函数的输入和输出.希望你能帮助我更快地完成这项功能.

我的 目标是将矢量"Volume"分区,其中每个bin等于100份.向量"卷"包含交易的股票数量.这是它的样子:

head(Volume, n = 60)
[1]  5  3  1  5  3  1  1  1  1  1  1  1 18  1  1 18  2  7 13  2  7 13  3  2  1  1  3  2  1  1  1
[32]  1  6  6  1  1  1  1  1  1  1  1 18  2  1  1  2  1 14 18  2  1  1  2  1 14  1  1  9  5
Run Code Online (Sandbox Code Playgroud)

向量"binIdexVector"与"Volume"的长度相同,它包含bin号; 即前100个股票的每个元素得到数字1,接下来100个股票的每个元素得到数字2,接下来100个股票的每个元素得到数字3,依此类推.这是矢量的样子:

 head(binIdexVector, n = 60)
[1] 1 1 …
Run Code Online (Sandbox Code Playgroud)

performance for-loop r vectorization rcpp

7
推荐指数
1
解决办法
678
查看次数

在MATLAB中找到矩阵的最大公约数

我正在寻找一种方法来划分具有最低公约数的某些矩阵元素.

例如,我有矢量

[0,0,0; 2,4,2;-2,0,8]
Run Code Online (Sandbox Code Playgroud)

我可以告诉最低公约数是2,所以除法后的矩阵将是

[0,0,0;1,2,1;-1,0,4]
Run Code Online (Sandbox Code Playgroud)

什么是内置方法可以计算这个?

提前致谢

ps我个人不喜欢使用循环进行此计算,似乎内置计算可以执行矩阵元素划分.

matlab matrix vectorization

7
推荐指数
2
解决办法
1346
查看次数

矢量化pandas.DataFrame的集成

我有一个DataFrame力 - 位移数据.位移数组已设置为DataFrame索引,列是不同测试的各种力曲线.

如何计算完成的工作("曲线下面积")?

我看着numpy.trapz哪些似乎做了我需要的东西,但我认为我可以避免像这样循环遍历每一列:

import numpy as np
import pandas as pd 

forces = pd.read_csv(...)
work_done = {}

for col in forces.columns:
    work_done[col] = np.trapz(forces.loc[col], forces.index))
Run Code Online (Sandbox Code Playgroud)

我希望DataFrame在曲线下创建一个新的区域而不是a dict,并且认为DataFrame.apply()或某些东西可能是合适的但不知道从哪里开始寻找.

简而言之:

  1. 我可以避免循环吗?
  2. DataFrame可以直接创建一项工作吗?

在此先感谢您的帮助.

python numpy vectorization numerical-integration pandas

7
推荐指数
1
解决办法
4103
查看次数

如何编写兼容普通Python值和NumPy数组的条件代码?

为了在Python中编写"分段函数",我通常使用if(在控制流或三元运算符形式).

def spam(x):
    return x+1 if x>=0 else 1/(1-x)
Run Code Online (Sandbox Code Playgroud)

现在,有了NumPy,我们的口头禅是为了避免在单个值上进行矢量化,以获得性能.所以我认为这样的事情会更受欢迎:正如Leon所言,以下是错误的

def eggs(x):
    y = np.zeros_like(x)
    positive = x>=0
    y[positive] = x+1
    y[np.logical_not(positive)] = 1/(1-x)
    return y
Run Code Online (Sandbox Code Playgroud)

(纠正我,如果我在这里错过了一些东西,因为坦率地说,我觉得这很难看.)

现在,当然只有在实际上是一个NumPy数组eggs才会起作用x,因为否则x>=0只会产生一个布尔值,它不能用于索引(至少不做正确的事情).

有没有一种很好的方法来编写看起来更像是spam在Numpy数组上惯用的代码,或者我应该使用vectorize(spam)

python arrays numpy vectorization

7
推荐指数
1
解决办法
220
查看次数

从坐标列表中分配矩阵中的1

我想要一个坐标列表.对于坐标中的每个位置,我想为矩阵分配1.最终矩阵应如下所示.我想使用快速矢量化方法而不是for循环.

    > sample.matrix
      A B C D E F G H I J K L M N O P Q R S T
    A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    B 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
    C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud)

r vectorization

7
推荐指数
1
解决办法
141
查看次数

Tensorflow在张量中的前n个值

有谁知道如何提取排名2张量的每行的前n个最大值?

例如,如果我希望形状[2,4]的张量的前2个值具有值:

[[40,30,20,10],[10,20,30,40]]

所需的条件矩阵如下所示:[[True,True,False,False],[False,False,True,True]]

一旦我有了条件矩阵,我就可以使用tf.select来选择实际值.

谢谢你的帮助!

vectorization tensorflow

7
推荐指数
1
解决办法
7546
查看次数

连续非连续切片的Numpy减少

假设我有两个numpy数组,A形状(d, f)I形状(d,)包含索引0..n,例如

I = np.array([0, 0, 1, 0, 2, 1])
A = np.arange(12).reshape(6, 2)
Run Code Online (Sandbox Code Playgroud)

我要寻找一个快速的方式,使削减,特别是sum,meanmax,在所有切片A[I == i, :]; 一个慢版本

results = np.zeros((I.max() + 1, A.shape[1]))
for i in np.unique(I):
    results[i, :] = np.mean(A[I == i, :], axis=0)
Run Code Online (Sandbox Code Playgroud)

在这种情况下给出

results = [[ 2.66666667,  3.66666667],
           [ 7.        ,  8.        ],
           [ 8.        ,  9.        ]])
Run Code Online (Sandbox Code Playgroud)

编辑:我根据Divakar的回答和之前的海报(已删除)pandas回答做了一些时间安排.

时间码:

from __future__ import division, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy max vectorization

7
推荐指数
1
解决办法
303
查看次数

从向量创建矩阵,其中每行是向量的移位版本

我有一个像这样的numpy数组

import numpy as np

ar = np.array([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

我想创建一个如下所示的数组:

array([[4, 1, 2, 3],
       [3, 4, 1, 2],
       [2, 3, 4, 1],
       [1, 2, 3, 4]])
Run Code Online (Sandbox Code Playgroud)

因此,每行对应于ar行指数+ 1的移位.

简单的实现可能如下所示:

ar_roll = np.tile(ar, ar.shape[0]).reshape(ar.shape[0], ar.shape[0])

for indi, ri in enumerate(ar_roll):
    ar_roll[indi, :] = np.roll(ri, indi + 1)
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出.

我的问题是,是否有一种更聪明的方法来避免循环.

python performance numpy vectorization

7
推荐指数
2
解决办法
954
查看次数

每行的Bin元素 - NumPy的矢量化2D Bincount

我有一个带整数值的NumPy数组.矩阵的值在矩阵中从0到最大元素(换句话说,在其中呈现的从0到最大数据元素的所有数字).我需要构建有效(有效的快速全矢量化解决方案)来搜索每行中的元素数量,并根据矩阵值对其进行编码.

我找不到类似的问题,或者以某种方式帮助解决这个问题的问题.

所以,如果我有这个data输入:

# shape is (N0=4, m0=4) 
1   1   0   4
2   4   2   1
1   2   3   5
4   4   4   1
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

# shape(N=N0, m=data.max()+1):
1   2   0   0   1   0
0   1   2   0   1   0
0   1   1   1   0   1
0   1   0   0   3   0
Run Code Online (Sandbox Code Playgroud)

我知道如何通过简单地计算逐行data 迭代的每一行中的唯一值来解决这个问题,然后结合考虑到data数组中所有可能值的结果.

在使用NumPy进行矢量化时,关键问题是逐个搜索每个数字很慢并且假设有很多唯一数字,这不是有效的解决方案.通常,两者N和唯一数字计数相当大(顺便说一下,N似乎比唯一数字计数大).

有人有好主意吗?)

python performance numpy matrix vectorization

7
推荐指数
1
解决办法
729
查看次数