标签: vectorization

如何使用numpy.vectorize或numpy.frompyfunc

[编辑:我刷这个例子,所以我没有很好地清理我的代码.我的问题更多,如何将子数组传递给numpy.vectorize-d函数,而不是特别关于这个例子.

我无法弄清楚如何使用numpy.vectorize或numpy.frompyfunc来向量化以数组作为参数的命令.

让我们想想这个简单的例子(我理解这是一个非常基本的例子,我根本不需要使用numpy.vectorize.我只是想要一个例子):

aa = [[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]]
bb = [[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]]
Run Code Online (Sandbox Code Playgroud)

我想要一个函数,它将aa和bb的每个子数组的第二个元素相加.在这个例子中,我想返回一个[202 203 206 210]的数组

但像这样的代码不起作用:

def vec2(bsub, asub):
    return bsub[1] + asub[1]

func2 = np.vectorize(vec2)
func2( bb, aa )
Run Code Online (Sandbox Code Playgroud)

与numpy.frompyfunc类似的事情没有运气.

我的问题是,如何将一个子数组列表转换为numpy.vectorize-d函数,并让每个子数组成为函数的参数?

python numpy vectorization

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

缩短长表达式

我想为函数创建一个函数句柄:

f = @(x) (x-1)*(x-2)*...*(x-50);
Run Code Online (Sandbox Code Playgroud)

如何在不输入所有50个术语的情况下在MATLAB中执行此操作?

matlab vectorization

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

可以进行矢量化吗?会有什么好处吗?

这个功能在我的跑步中吃了很多时间.但是看到的是内置功能的大部分时间polyarea.这段代码可以进行矢量化以提升性能吗?

Profiler报告 -

  time   calls
                  1 function [S S_area] = Polygons_intersection_Compute_area(S)
                  2 % Guillaume JACQUENOT
                  3 % guillaume at jacquenot at gmail dot com
                  4 % 2007_10_08
                  5 % 2009_06_16
                  6 % Compute area of each polygon of in S.
                  7 % Results are stored as a field in S
                  8 
  0.50   51945    9 S_area = struct('A', {}); 
  0.20   51945   10 for i=1:numel(S) 
  0.28  103890   11     S(i).area = 0; 
  1.34  103890   12     S_area(i).A = zeros(1,numel(S(i).P)); 
  0.69  103890   13 …
Run Code Online (Sandbox Code Playgroud)

performance matlab vectorization

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

在Matlab中矢量化双循环

我有一个矩阵A,包含一年中每一天的24个值(每小时一个值).每列A是不同的一天,每天有24行的数据(A24乘365).我想通过比较每天的小时数据来比较每一天.为此,我将获取一列数据并将其与下一列进行比较.我取两列中每小时数据的差异,然后将它们平方并求它们得到一个值,表明两天的相似程度.然后我用每个可能的天数组合做这个,创建一个365乘365的矩阵d,表明每天与每一天的相似程度.例如,元素d(20,100)包含一个值,表示一年中第20天与第100天的相似程度.代码正在运行,但速度很慢,我希望能够对其进行矢量化.非常感谢帮助.

for j=1:365
    for k=1:365
        d(j,k)=sqrt(sum((A(:,j)-A(:,k)).^2));
    end
end
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

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

加速Python/NumPy中的多项随机样本

我正在通过一组概率从多项分布生成绘制向量probs,其中每个绘制是probs选择的条目的索引:

import numpy as np
def sample_mult(K, probs):
    result = np.zeros(num_draws, dtype=np.int32)
    for n in xrange(K):
        draws = np.random.multinomial(1, probs)
        result[n] = np.where(draws == 1)[0][0]
    return result
Run Code Online (Sandbox Code Playgroud)

这可以加快吗?np.random.multinomial一遍又一遍地调用似乎效率低下(也np.where可能很慢).

timeitThe slowest run took 6.72 times longer than the fastest. This could mean that an intermediate result is being cached 100000 loops, best of 3: 18.9 µs per loop

python optimization numpy vectorization scipy

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

使用numpy数组将值分配给另一个数组

我有以下numpy数组matrix,

matrix = np.zeros((3,5), dtype = int)

array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

假设我有这个numpy的阵列indices,以及

indices = np.array([[1,3], [2,4], [0,4]])

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

问题:如何将1s 分配给数组matrix指定索引的元素indices.期望矢量化实现.

为了更清晰,输出应如下所示:

    array([[0, 1, 0, 1, 0], #[1,3] elements are changed
           [0, 0, 1, 0, 1], #[2,4] elements are changed
           [1, 0, 0, 0, 1]]) #[0,4] elements are changed
Run Code Online (Sandbox Code Playgroud)

python arrays indexing numpy vectorization

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

定期从矢量构造矩阵

我有一个b包含30个条目的向量.

我想避免使用for循环来构造这样的矩阵:

在此输入图像描述

其中b_ii向量的第n个条目b.

例如,定义向量

b = [2 6 -7 3 1 -4 -1  1 11  8 -4  9  2  0  2 -1  0  4  4  4  2 -4  2  5  1 3  2 -1  1 -2]
Run Code Online (Sandbox Code Playgroud)

我尝试使用for循环的地方是:

A = zeros(5,5);
for i = 1:5
    A(i) = b(i+5);
    A(i+5) = b(i+6);
    A(i+10) = b(i+7);
    A(i+15) = b(i+8);
    A(i+20) = b(i+9);
end
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

有没有更快更通用的方法来生成这个矩阵?

matlab matrix vectorization

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

应用于数组的Linspace

给出一个类似的数组a = [ -1; 0; 1];.对于每个a(i),我需要计算线性间隔矢量linspace(min(a(i),0),max(a(i),0),3);,其中每个linspace-vector应存​​储到矩阵中:

A = [-1 -0.5 0;
      0   0  0;
      0  0.5 1];
Run Code Online (Sandbox Code Playgroud)

使用for循环,我可以这样做:

for i=1:3
    A(i) = linspace(min(a(i),0),max(a(i),0),3);
 end
Run Code Online (Sandbox Code Playgroud)

如何在不使用循环的情况下实现此目的?

matlab vectorization

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

如何对所有具有相同名称的列逐行汇总所有观察值?

我正在查看加拿大安大略省的人口普查数据,并且列中有相同的列名(它们具有相同的名称,因为它们代表了人口普查区域的不同细分).我想对任何具有相同列名但遇到麻烦的列进行逐行求和.在我的示例数据中,只有重复的列名,但在实际数据中有几个具有相同名称的列.R中是否有矢量化方式来执行此操作?

  TORONTO HALTON  PEEL YORK BRANT HALDIMAND-NORFOLK HAMILTON MUSKOKA NIAGARA 
  20855   4011 11178 8138   996               739     3835     305    2923            
  23281   3997 11770 8417   961               684     4095     343    2970            
  24130   3900 11810 8306   972               732     4168     334    2985            
 TORONTO HALTON  PEEL  YORK BRANT HALDIMAND-NORFOLK HAMILTON MUSKOKA NIAGARA 
  39924   7863 21415 15714  1947              1428     7320     646    5675    
  44357   7820 22340 16261  1861              1369     7755     697    5775            
  46016   7679 22577 16260  1971              1447     7883     717    5868 
Run Code Online (Sandbox Code Playgroud)

我试着用ifelse声明没有运气.像这样的伪代码:

# where i is the column …
Run Code Online (Sandbox Code Playgroud)

if-statement r vectorization multiple-columns

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

用R向量化我的函数不起作用

我有这个功能:

fx <- function (x) {
  if (x <= 0) {
    return(-1 * (x**3))
  }
  else if (0 < x && x <= 1) {
    return(x**2)
  }
  else if (x > 1) {
    return(sqrt(x))
  }
}

Run Code Online (Sandbox Code Playgroud)

我将向量化函数转换为:

fVectorize <- function(x) {
  result <- ifelse(x <= 0, -1 * (x**3), ifelse(0 < x && x <= 1, x**2, sqrt(x)))
  result
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下值,但不起作用:

fVectorize(c(-2, -4, -5))
fVectorize(c(0.5, 0.3, 0.7))
fVectorize(c(3, -4, 0.7))
Run Code Online (Sandbox Code Playgroud)

似乎只是采取了第一个条件。

任何的想法?

r function vectorization

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