我有一个像这样的数组
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]])
答案 0 :(得分:5)
a
答案 1 :(得分:1)
假设a
作为要添加值的输入数组,val
是要添加的标量值,您可以使用适用于任何多维数组的方法{{1使用broadcasting
和reshaping
。这是实施 -
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]
(对于第二个子矩阵),依此类推。