最近,我发现自己越来越多地在大量结构化数据(如点和多边形)上使用NumPy数组来进行内存管理和计算速度。在这样做的过程中,我总是需要对整个数组执行一些函数f(x)。根据经验和谷歌搜索,迭代数组并不是这样做的,因此,内置的函数应该被矢量化并广播到整个数组。
查看的文档,我们得到了下面的示例:
def myfunc(a, b):
"Return a-b if a>b, otherwise return a+b"
if a > b:
return a - b
else:
return a + b
>>&
例如,会
raw = ones(1000, 1);
x = cell(1000, 1);
for i=1:size(raw, 1)
x(i) = some_process(raw(i));
end
需要的内存比
raw = ones(1000, 1);
x = arrayfun(@(r) some_process(r), raw, 'UniformOutput', False);
据我理解,预分配的for-循环将需要在开始进程之前初始化raw和x,从而需要更多的内存。这是正确的吗?
谢谢你的帮助。
我想在matlab中并行化我的部分代码。例如,以下部分:
v1=[1,3,6,8];
ggx=5.*ones(15,14);
gax=ones(15,14);
parfor i = 1:length(v1)
m = v1(i);
if m > 1
gax(1:m-1,m-1) = ggx(1:m-1,m-1);
end
if m<nn
gax(m+1:end,m) = ggx(m+1:end,m);
end
end
但是有一个错误: error: parfor中的变量gax不能与MATLAB中的classified.See并行,称为“概述”。
有人知道如何删除错误
目前,我想知道numpy数组的行为如何。我觉得从向量(Nx1维度)到“真实数组”(NxN维度),维度并不一致。
,我不明白,为什么这不管用:
a = array(([1,2],[3,4],[5,6]))
concatenate((a[:,0],a[:,1:]), axis = 1)
# ValueError: all the input arrays must have same number of dimensions
似乎: (at 1:])带来了不同,但是(:0不起作用)
提前感谢!
Detailled版本:因此,我希望shape(b)[0]引用垂直方向(__Nx1数组),就像在2D 数
考虑有两个数组:
形状为A的(n,)
形状为B的(n,m)
如何将这两者相加,以便将A[i]添加到B[i]的所有m值中
当然,我可以用for循环来完成它,但是我想学习如何正确地使用numpy。
那么,有什么优雅的方法可以在“裸皮”中实现呢?
(n,) + (n,m)示例
A = [1,2]
B = [[1,2,3],[4,5,6]]
A + B should be [[2,3,4],[6,7,8]]
如何添加(n,) + (m,n)的另一种方式也会很有趣
A = [1,2,3]
B = [[1,2,3],[3,4,5]]
A + B should be [[2,4,6],[4,6,8]]
编辑