2015-06-14 25 views
6

Tôi có một mảng như thế nàythêm giá trị cho mỗi phần tử trong mảng python

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

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

Tôi muốn thêm một giá trị cho mỗi phần tử trong mảng. Tôi muốn kết quả trả về của tôi 4 mảng như

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

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

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

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

Trả lời

5
[a + i.reshape(2, 2) for i in np.identity(4)] 
1

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 broadcastingreshaping. 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.

Các vấn đề liên quan