Lực lượng thường xuyên đè nặng bên trái và bên phải của phép gán để khớp, ví dụ: nếu tôi a[:] = b
, b
phải có cùng hình dạng hoặc phát sóng có cùng hình dạng a
. Nhưng có vẻ là một ngoại lệ cho quy tắc rằng:Lập chỉ mục và chỉ định ưa thích của Numpy
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.copy()
>>> a[[0,1,2]] = b[::2]
>>> a
array([0, 2, 4, 3, 4, 5, 6, 7, 8, 9])
>>> a[np.arange(10)] = b[:2]
>>> a
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
Nó có vẻ chỉ làm việc với mảng 1d và chỉ khi có chỉ mục ưa thích ở phía bên trái của công việc, nhưng tôi đã không thể tìm thấy tài liệu cho hành vi này ở bất cứ đâu. Hành vi này có được ghi lại không, nếu có, và ai đó có thể đưa ra ví dụ về thời điểm nó có thể hữu ích không?
Cập nhật:
Dường như kiểu flatiter NumPy cư xử theo cách này cũng vậy, là có một số mối liên hệ giữa flatiter và lập chỉ mục ưa thích mà tôi không biết?
>>> a.flat = [10,11]
>>> a
array([10, 11, 10, 11, 10, 11, 10, 11, 10, 11])
>>> a.flat[:] = [2,3,4]
>>> a
array([2, 3, 4, 2, 3, 4, 2, 3, 4, 2])
>>> a.flat = range(100)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Bạn đã mô tả chính xác tính năng này - nó chỉ được phép khi thực hiện các nhiệm vụ kết hợp với lập chỉ mục nâng cao trên mảng một chiều. Trong khi tôi chắc chắn tôi đã đọc về điều này trong tài liệu, tôi không thể tìm thấy một liên kết tại thời điểm này. Tôi thấy điều này hữu ích ngay bây giờ và sau đó, mặc dù tôi nghĩ rằng nó sẽ tốt hơn nếu điều này được hỗ trợ bởi một chức năng chuyên dụng và nhiệm vụ thường xuyên vẫn sẽ đưa ra một lỗi. –
Phải, tôi nhanh chóng giả định nó chỉ là phát sóng nhưng tôi thấy bây giờ nó không thực sự đáp ứng các yêu cầu phát sóng! Kỳ dị! – wim
Tôi không chắc chắn đó là một tính năng hay một lỗi ... ít nhất, http://docs.scipy.org/doc/numpy/reference/internals.code-explanations.html#getting-or-setting có vẻ không đề cập đến điều này như một trường hợp đặc biệt. – Tanriol