为数组python中的每个元素添加值

时间:2015-06-14 07:53:33

标签: python python-2.7 numpy

我有一个像这样的数组

a= np.arange(4).reshape(2,2)

array([[0, 1],[2, 3]])

我想为数组中的每个元素添加一个值。我希望我的结果返回4个数组,如

array([[1, 1],[2, 3]])

array([[0, 2],[2, 3]])

array([[0, 1],[3, 3]])

array([[0, 1],[2, 4]])

2 个答案:

答案 0 :(得分:5)

a

答案 1 :(得分:1)

假设a作为要添加值的输入数组,val是要添加的标量值,您可以使用适用于任何多维数组的方法{{1使用broadcastingreshaping。这是实施 -

a

示例运行 -

shp = a.shape  # Get shape

# Get an array of 1-higher dimension than that of 'a' with vals placed at each
# "incrementing" index  along the entire length(.size) of a and add to a 
out = a  + val*np.identity(a.size).reshape(np.append(-1,shp))

如果您希望从In [437]: a Out[437]: array([[[8, 1], [0, 5]], [[3, 2], [5, 1]]]) In [438]: val Out[438]: 20 In [439]: out Out[439]: array([[[[ 28., 1.], [ 0., 5.]], [[ 3., 2.], [ 5., 1.]]], [[[ 8., 21.], [ 0., 5.]], [[ 3., 2.], [ 5., 1.]]], [[[ 8., 1.], [ 20., 5.]], [[ 3., 2.], [ 5., 1.]]], [[[ 8., 1.], [ 0., 25.]], [[ 3., 2.], [ 5., 1.]]], [[[ 8., 1.], [ 0., 5.]], [[ 23., 2.], [ 5., 1.]]], .... 创建单独的数组,则可以使用其他步骤:out。但为了提高效率,我建议使用索引来访问所有这些子矩阵,例如np.array_split(out,a.size)(对于第一个子矩阵),out[0](对于第二个子矩阵),依此类推。