在Python中增加矩阵的子集

时间:2011-01-29 09:14:07

标签: python matrix numpy

我想增加矩阵的一个小的子部分(变量)[下面的说明性代码] - 但是通过循环遍历它们看起来很邋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.]])

2 个答案:

答案 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