Gần đây tôi đã gặp sự cố khi tạo mảng đối tượng Numpy bằng cách sử dụng ví dụ:Mảng đối tượng khó khăn
a = np.array([c], dtype=np.object)
trong đó c là một thể hiện của một số lớp phức tạp, và trong một số trường hợp NumPy cố gắng truy cập một số phương pháp của lớp đó. Tuy nhiên, làm:
a = np.empty((1,), dtype=np.object)
a[0] = c
giải quyết vấn đề. Tôi tò mò về sự khác biệt giữa hai nội bộ này. Tại sao trong trường hợp đầu tiên có thể Numpy thử và truy cập một số thuộc tính hoặc phương pháp của c
?
EDIT: Đối với hồ sơ, đây là mã ví dụ đó chứng tỏ vấn đề:
import numpy as np
class Thing(object):
def __getitem__(self, item):
print "in getitem"
def __len__(self):
return 1
a = np.array([Thing()], dtype='object')
này in ra getitem
hai lần. Về cơ bản, nếu có __len__
có trong lớp, thì đây là thời điểm một người có thể gặp phải hành vi không mong muốn.
Không liên quan, nhưng tại sao 'np.object' và không chỉ' object'? – JBernardo
Hai giá trị này tương đương nhau ('' object == np.object'' trả về '' True'') vì vậy điều này không liên quan đến các vấn đề tôi thấy. – astrofrog
@astrofog Đó là lý do tại sao tôi hỏi và nói rằng nó không liên quan. – JBernardo