[编辑:我刷这个例子,所以我没有很好地清理我的代码.我的问题更多,如何将子数组传递给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函数,并让每个子数组成为函数的参数?
我想为函数创建一个函数句柄:
f = @(x) (x-1)*(x-2)*...*(x-50);
Run Code Online (Sandbox Code Playgroud)
如何在不输入所有50个术语的情况下在MATLAB中执行此操作?
这个功能在我的跑步中吃了很多时间.但是看到的是内置功能的大部分时间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) 我有一个矩阵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) 我正在通过一组概率从多项分布生成绘制向量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可能很慢).
timeit 说 The 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
我有以下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) 我有一个b包含30个条目的向量.
我想避免使用for循环来构造这样的矩阵:
其中b_i是i向量的第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)
结果是
有没有更快更通用的方法来生成这个矩阵?
给出一个类似的数组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)
如何在不使用循环的情况下实现此目的?
我正在查看加拿大安大略省的人口普查数据,并且列中有相同的列名(它们具有相同的名称,因为它们代表了人口普查区域的不同细分).我想对任何具有相同列名但遇到麻烦的列进行逐行求和.在我的示例数据中,只有重复的列名,但在实际数据中有几个具有相同名称的列.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) 我有这个功能:
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)
似乎只是采取了第一个条件。
任何的想法?
vectorization ×10
matlab ×5
numpy ×3
python ×3
r ×2
arrays ×1
function ×1
if-statement ×1
indexing ×1
matrix ×1
optimization ×1
performance ×1
scipy ×1