Nói rằng tôi có một vector numpy,Vectorizing một hoạt động lát NumPy
A = zeros(100)
và tôi chia nó thành subvectors bởi một danh sách các breakpoint mà chỉ số thành A
, ví dụ,
breaks = linspace(0, 100, 11, dtype=int)
Vì vậy, các i
-th subvector sẽ nằm giữa các chỉ số breaks[i]
(bao gồm) và breaks[i+1]
(độc quyền). Các điểm ngắt không nhất thiết phải là một điểm tương đồng, đây chỉ là một ví dụ. Tuy nhiên, chúng sẽ luôn tăng nghiêm ngặt.
Bây giờ tôi muốn hoạt động trên các phân nhóm con này. Ví dụ, nếu tôi muốn đặt tất cả các yếu tố của subvector i
-thứ để i
, tôi có thể làm:
for i in range(len(breaks) - 1):
A[breaks[i] : breaks[i+1]] = i
Hoặc tôi có thể muốn tính toán subvector có nghĩa là:
b = empty(len(breaks) - 1)
for i in range(len(breaks) - 1):
b = A[breaks[i] : breaks[i+1]].mean()
Và vân vân .
Làm cách nào để tránh sử dụng các vòng for
và thay vào đó vector hóa các hoạt động này?
là 'breaks' trước sắp xếp? – Divakar
@ Divakar: Vâng, chúng đang gia tăng nghiêm ngặt. – cfh
Ngoài ra, giới hạn ngắt có thể bao gồm toàn bộ 'A', tức là có thể có một số thành phần của A không bị thay đổi sau khi hoạt động này không? – Divakar