标签: vectorization

MATLAB:比较字符串的单元格数组

我有两个字符串的单元格数组,我想检查它们是否包含相同的字符串(它们不必按相同的顺序排列,也不知道它们是否具有相同的长度).

例如:

a = {'2' '4' '1' '3'};
b = {'1' '2' '4' '3'};
Run Code Online (Sandbox Code Playgroud)

要么

a = {'2' '4' '1' '3' '5'};
b = {'1' '2' '4' '3'};
Run Code Online (Sandbox Code Playgroud)

首先我想到了,strcmp但它需要循环一个单元格内容并与另一个进行比较.我也考虑ismember使用类似的东西:

ismember(a,b) & ismember(b,a)
Run Code Online (Sandbox Code Playgroud)

但是我们事先并不知道它们的长度相同(显然是不平等的情况).那么,如果不编写过多的if/else案例,你将如何以最有效的方式进行这种比较.

string comparison matlab vectorization cell-array

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

如何对这个大型数组计算进行矢量化和加速?

我目前正在尝试计算10.000 x 10.000数组值中所有子方格总和的总和.例如,如果我的数组是:

1 1 1 
2 2 2
3 3 3 
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

1+1+1+2+2+2+3+3+3                        [sum of squares of size 1]
+(1+1+2+2)+(1+1+2+2)+(2+2+3+3)+(2+2+3+3) [sum of squares of size 2]
+(1+1+1+2+2+2+3+3+3)                     [sum of squares of size 3]
________________________________________
68
Run Code Online (Sandbox Code Playgroud)

所以,作为第一次尝试,我写了一个非常简单的python代码来做到这一点.因为它在O(k ^ 2.n ^ 2)中(n是大数组的大小,k是我们得到的子方形的大小),处理非常长.我在O(n ^ 2)中写了另一个算法来加速它:

def getSum(tab,size):
    n = len(tab)
    tmp = numpy.zeros((n,n))

    for i in xrange(0,n):
        sum = 0
        for j in xrange(0,size):
            sum += tab[j][i]
        tmp[0][i] = sum

        for j in xrange(1,n-size+1):
            sum += (tab[j+size-1][i] - tab[j-1][i])
            tmp[j][i] …
Run Code Online (Sandbox Code Playgroud)

python arrays algorithm numpy vectorization

8
推荐指数
2
解决办法
448
查看次数

Vectorized NumPy linspace用于多个启动和停止值

我需要创建一个2D数组,其中每一行可以以不同的数字开头和结尾.假设每行的第一个和最后一个元素被给出,所有其他元素只是根据行的长度进行插值在一个简单的例子中,假设我想创建一个3X3数组,其相同的开始位于0但不同的结尾由W给出:

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

有没有比以下更好的方法:

D=np.ones((3,3))*np.arange(0,3)
D=D/D[:,-1] 
W=np.array([2,4,6]) # last element of each row assumed given
Res= (D.T*W).T  
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization multidimensional-array numpy-broadcasting

8
推荐指数
2
解决办法
2378
查看次数

为给定的 2D 概率数组沿轴向量化 `numpy.random.choice`

Numpy 具有该random.choice功能,可让您从分类分布中进行采样。你会如何在一个轴上重复这个?为了说明我的意思,这是我当前的代码:

categorical_distributions = np.array([
    [.1, .3, .6],
    [.2, .4, .4],
])
_, n = categorical_distributions.shape
np.array([np.random.choice(n, p=row)
          for row in categorical_distributions])
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想消除 for 循环。

python random numpy vectorization

8
推荐指数
1
解决办法
3717
查看次数

对所有事情进行矢量化的冲动

我来自R和Matlab多年的julia,其中矢量化代码是性能的关键,并影响了我的思考.现在,阅读S. Johnson的这篇精彩博客文章"更多点"我确信朱莉娅的句法循环融合是该语言的一个很好的特征,但在移植我以前的矢量化代码时让我有点困惑.

将一些函数矢量化为几个参数是不好/差的形式?- 当我想迭代一个数组时,我是否应该编写所有例程的"标量"版本并调用点版本(或广播/地图)?

为了争论,请说我写下面的内容

function sphere_vol(r)
    return 4/3*pi*r^3
end
Run Code Online (Sandbox Code Playgroud)

然后在另一个函数中使用它,

function density(N, r)
    V = sphere_vol(r)
    return N/V
end
Run Code Online (Sandbox Code Playgroud)

等等(很多函数互相调用).我的直觉(来自其他语言)是在方便时将大多数函数定义为矢量化,如sphere_vol(r) = 4/3*pi*r.^3(微不足道的变化).有没有任何意义,如果我可以自动调用sphere_vol.(r::Array)(或map(sphere_vol, r::Array)?对于单参数函数,这不是一个重要的决定,但对于多个参数,它可以显着改变实现:我可以定义矢量化的density(N, r)矢量化版本以上r,或通过N,或两者(返回矩阵),但它更琐碎写这种方式(需要通过调用内部的广播sphere_vol.()./),在R和Matlab的我做出了这个选择对案件逐案基础上与此妥协:

  1. 矢量化更方便,更有效:我可以调用density(N::Vector, r::Vector)一次并获得完整的数组值.

  2. 在几个参数上一个矢量化函数很快变得很麻烦和/或难以管理(2个参数通常可以用一些技巧); 特别是当返回值不是标量时.

在朱莉娅实施新功能时,我不知道如何进行判断.

如果说在朱莉娅,我最好编写上面的"标量"版本吗?或者,如果对某些参数进行矢量化(例如Bessel,它调用Fortran例程的特殊函数),某些例程会更有效吗?我猜测有一个微妙的平衡(根据品味/风格,但也),但与R或Matlab相比,对性能的影响要小得多.

vectorization broadcasting julia

8
推荐指数
1
解决办法
200
查看次数

使用 numpy.einsum 删除循环

我有一些嵌套循环(总共三个),我试图使用 numpy.einsum 来加速计算,但我正在努力使符号正确。我设法摆脱了一个循环,但我无法弄清楚另外两个。这是我到目前为止所得到的:

import numpy as np
import time

def myfunc(r, q, f):
    nr = r.shape[0]
    nq = q.shape[0]
    y = np.zeros(nq)
    for ri in range(nr):
        for qi in range(nq):
            y[qi] += np.einsum('i,i',f[ri,qi]*f[:,qi],np.sinc(q[qi]*r[ri,:]/np.pi))
    return y

r = np.random.random(size=(1000,1000))
q = np.linspace(0,1,1001)
f = np.random.random(size=(r.shape[0],q.shape[0]))

start = time.time()
y = myfunc(r, q, f)
end = time.time()

print(end-start)
Run Code Online (Sandbox Code Playgroud)

虽然这比原来快得多,但这仍然太慢,大约需要 30 秒。请注意,没有 einsum 调用的原始内容如下(看起来需要大约 2.5 小时,迫不及待地想确定):

def myfunc(r, q, f):
    nr = r.shape[0]
    nq = q.shape[0]
    y = np.zeros(nq)
    for ri in range(nr): …
Run Code Online (Sandbox Code Playgroud)

python performance numpy vectorization numpy-einsum

8
推荐指数
1
解决办法
193
查看次数

编译器、库或用户错误?Eigen::Array,GCC 12.1,“数组下标 [...] 部分超出数组边界”

更新到 GCC 12.1 后,我的项目中出现array subscript \xe2\x80\x98__m256d_u[0]\xe2\x80\x99 is partly outside array bounds错误(或者更确切地说带有 的警告-Werror),因此我尝试隔离问题。

\n

这是一个 MWE,我也将其放在godbolt上(改为矢量类型__m512d_u,但否则是相同的错误):

\n
#include <Eigen/Dense>\n#include <iostream>\n\nusing Eigen::Array;\n\nArray<double, 3, 2> foo(){\n\n    Array<double, 2, 2> a;\n    a.setRandom();\n\n    Array<double, 3, 2> b;\n    b.col(0).tail(2) = a.col(1);\n    // b.col(0).template tail<2>() = a.col(1);\n\n    return b;\n}\n\nint main(){\n    std::cout << foo() << \'\\n\';\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

相关的编译选项有-Wall -Wextra -Werror -O3 -march=native,以及错误信息注释note: at offset [16, 24] into object \xe2\x80\x98a\xe2\x80\x99 of size 32

\n

在以下情况下不会出现该错误: …

c++ arrays vectorization eigen eigen3

8
推荐指数
0
解决办法
845
查看次数

了解 Java 17 Vector 使用 pow 运算符的缓慢性和性能

我有一个与 Java 17 新的 Vector API 功能中的 pow() 函数相关的问题。我正在尝试以矢量化方式实现布莱克斯科尔斯公式,但我很难获得与标量实现相同的性能

\n

代码如下:

\n
    \n
  1. 我创建了一个双精度数组(目前只有 5.0)
  2. \n
  3. 我循环该数组的元素(标量和向量的循环语法不同)
  4. \n
  5. 我从其中的双数组创建 DoubleVectors 并进行计算(或只是计算标量)我正在尝试执行 e^(value),我相信这就是问题所在
  6. \n
\n

以下是一些代码片段:

\n
    public static double[] createArray(int arrayLength)\n    {\n        double[] array0 = new double[arrayLength];\n        for(int i=0;i<arrayLength;i++)\n        {\n            array0[i] = 2.0;\n        }\n        return array0;\n    } \n
Run Code Online (Sandbox Code Playgroud)\n
    @Param({"256000"})\n    int arraySize;\n    public static final VectorSpecies<Double> SPECIES = DoubleVector.SPECIES_PREFERRED;\n    DoubleVector vectorTwo =  DoubleVector.broadcast(SPECIES,2);\n    DoubleVector vectorHundred =  DoubleVector.broadcast(SPECIES,100);\n\n    double[] scalarTwo = new double[]{2,2,2,2};\n    double[] scalarHundred  = new double[]{100,100,100,100};\n\n    @Setup\n    public void …
Run Code Online (Sandbox Code Playgroud)

java performance simd vectorization java-17

8
推荐指数
1
解决办法
419
查看次数

在 Mac 上安装 pgvector 扩展

我正在尝试在我的 mac 上安装 postgres 矢量扩展,但我得到了

ERROR:  extension "vector" has no installation script nor update path for version "0.4.0".
Run Code Online (Sandbox Code Playgroud)

这就是我所做的:

  1. 按照github上所示的安装指南进行操作: 在此输入图像描述

但是当我运行时CREATE EXTENSION vector;出现错误:

ERROR:  could not open extension control file "/Applications/Postgres.app/Contents/Versions/13/share/postgresql/extension/vector.control": No such file or directory
Run Code Online (Sandbox Code Playgroud)
  1. 我使用以下命令将 pgvector 的内容复制到 posgresql/extension 中:

    sudo cp -r ~/Downloads/pgvector/* /Applications/Postgres.app/Contents/Versions/13/share/postgresql/extension/

现在尝试运行,CREATE EXTENSION vector;错误是:

ERROR:  extension "vector" has no installation script nor update path for version "0.4.0".
Run Code Online (Sandbox Code Playgroud)

这里有人见过这个问题吗?

顺便说一下我正在使用PostgreSQL 13.10

postgresql machine-learning vectorization

8
推荐指数
1
解决办法
6033
查看次数

根据潜在的开始和结束布尔列在时间序列数据中创建组(矢量化解决方案)

我的数据框结构如下:

   group  maybe_start  maybe_end
0    ABC        False      False
1    ABC         True      False
2    ABC        False      False
3    ABC        False      False
4    ABC         True      False
5    ABC        False      False
6    ABC        False       True
7    ABC        False      False
8    DEF        False      False
9    DEF        False      False
10   DEF         True      False
11   DEF        False      False
12   DEF        False       True
13   DEF        False      False
14   DEF        False      False
15   DEF        False       True
16   DEF         True      False
17   DEF        False      False
18   DEF        False       True …
Run Code Online (Sandbox Code Playgroud)

python vectorization pandas

8
推荐指数
1
解决办法
266
查看次数