我想增加矩阵的一个小的子部分(变量)[下面的说明性代码] - 但是通过循环遍历它们看起来很邋and且不优雅 - 我怀疑这是执行此计算的最慢方法。 我的一个想法是创建另一个数组,我想要增加的维度(下面的示例中为2x3),并用零填充此临时数组,因此它与原始数据的尺寸相同。我可以总结一下。
不确定如何在numpy
中完成此填充 - 或者这是否是执行此计算的最佳方式?我想尽可能地尝试优化它。
>>> import numpy as np
>>> a = np.zeros((10,10))
>>> for i in range(3,5):
... for x in range(4,7):
... a[i][x] += 1
>>> a
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
答案 0 :(得分:7)
您可以通过以下方式完成相同的操作:
a[3:5,4:7] += 1
答案 1 :(得分:1)
您还可以使用逻辑数组来访问子集的各个元素。当您的子集具有不规则形状时,尤其方便。
他们也表现得很好。例如
In []: M= randn(2000, 2000)
In []: timeit M[M< 0]+= 10
1 loops, best of 3: 42.1 ms per loop