Tôi đã một ma trận có tên xs
:Có một số cách thanh lịch để thao tác của tôi ndarray
array([[1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 1],
[2, 1, 0, 0, 0, 1, 2, 1, 1, 2, 2]])
Bây giờ tôi muốn thay thế các số không bởi các yếu tố trước gần nhất trong cùng hàng (Giả sử rằng cột đầu tiên phải là nonzero.). Giải pháp thô như sau:
In [55]: row, col = xs.shape
In [56]: for r in xrange(row):
....: for c in xrange(col):
....: if xs[r, c] == 0:
....: xs[r, c] = xs[r, c-1]
....:
In [57]: xs
Out[57]:
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],
[2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2]])
Mọi trợ giúp sẽ được đánh giá cao.
Tại sao bạn nghĩ giải pháp của mình không thanh lịch? Chỉ cải tiến tôi có thể nghĩ là bắt đầu vòng lặp từ col thứ hai, bởi vì bạn có giả định, nó sẽ giúp bạn tiết kiệm một vài hoạt động;) –
@jaux Tôi muốn sử dụng một số phép thuật lập chỉ mục của ndarray để làm điều này. Hiệu suất của vòng lặp trong python không phải là quá tốt. – Eastsun