2012-08-07 23 views
8

Cho phép nói mảng NumPy của bạn là:thêm một số cho tất cả các yếu tố lẻ hoặc thậm chí được lập chỉ mục trong mảng NumPy mà không có vòng

A = [1,1,2,3,4] 

Bạn chỉ có thể làm:

A + .1

để thêm một số vào mỗi phần tử có nhiều mảng một chiều

Tôi đang tìm cách thêm số chỉ là số lẻ hoặc số được lập chỉ mục A[::2] +1 trong khi vẫn giữ nguyên toàn bộ mảng.

Có thể thêm số vào tất cả các phần tử được lập chỉ mục lẻ hoặc thậm chí không có bất kỳ vòng lặp nào không?

+0

tại sao cần phải không có vòng lặp? bạn có thể hiển thị mã của bạn không? nơi bạn muốn thực hiện điều này trong mã? –

+1

"Trong khi giữ nguyên toàn bộ mảng" nghĩa là gì? Bạn có đang loại trừ các hoạt động tại chỗ không? – DSM

Trả lời

16
In [43]: A = np.array([1,1,2,3,4], dtype = 'float') 

In [44]: A[::2] += 0.1 

In [45]: A 
Out[45]: array([ 1.1, 1. , 2.1, 3. , 4.1]) 

Lưu ý rằng điều này sửa đổi A. Nếu bạn muốn rời khỏi A chưa sửa đổi, sao chép A đầu tiên:

In [46]: A = np.array([1,1,2,3,4], dtype = 'float') 

In [47]: B = A.copy() 

In [48]: B[::2] += 0.1 

In [49]: B 
Out[49]: array([ 1.1, 1. , 2.1, 3. , 4.1]) 

In [50]: A 
Out[50]: array([ 1., 1., 2., 3., 4.]) 
2

Something với danh sách hiểu biết có thể làm việc.

A = [1,1,2,3,4] 
A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))] 

Chỉ cần nhanh chóng và dơ bẩn với bộ ba. Có thể không hoạt động trong phiên bản Python của bạn, không thể nhớ phiên bản nào hoạt động được với nó.


Kiểm tra bằng Python 2.7.3 và 3.2.3 Python, sản lượng là như nhau:

>>> A = [1,1,2,3,4] 

>>> A 
[1, 1, 2, 3, 4] 

>>> A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))] 

>>> A 
[1, 1.1, 2, 3.1, 4] 
+0

Ah, đã bỏ lỡ bit mảng. Câu trả lời đầu tiên tốt hơn nhiều. Lỗi của tôi. – DrGodCarl

5

Ngoài câu trả lời trước, để sửa đổi số với chỉ số lẻ bạn nên sử dụng A [1: : 2] thay vì A [:: 2]

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