Giả sử a
như các mảng đầu vào mà giá trị được được bổ sung và val
là giá trị vô hướng được thêm vào, bạn có thể sử dụng một cách tiếp cận mà làm việc cho bất kỳ mảng đa chiều a
sử dụng broadcasting
và reshaping
. Dưới đây là việc thực hiện -
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))
mẫu chạy -
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.]]], ....
Nếu bạn muốn tạo ra các mảng riêng biệt từ out
, bạn có thể sử dụng một bước bổ sung: np.array_split(out,a.size)
. Nhưng đối với hiệu quả, tôi sẽ khuyên bạn nên sử dụng chỉ mục để truy cập tất cả các ma trận phụ đó như out[0]
(đối với ma trận con đầu tiên), out[1]
(đối với ma trận phụ thứ hai) và cứ tiếp tục như vậy.