我想我的代码会解释我想做什么:
class Book():
def __init__(self, Author, Pages):
self.Author = Author
self.Pages = Pages
def getAuthor(self):
return self.Author
book_1 = Book("Jane Smith", 20)
book_2 = Book("Billy", 20)
B = np.array([book_1, book_2])
print(B[0][1].getAuthor())
基本上,我想打印“Billy”,我得到的错误是:
TypeError: 'Book' object is not subscriptable
做这件事最好的方法是什么
Numpy(与MATLAB不同)不会向数组中添加您不要求的维度。因此,
B = np.array([book_1, book_2])
创建了一个数组(2,)
,而不是(2, 1)
或(1, 2)
。您可以通过打印B.shape
来验证这一点要访问第二个元素,只需执行
B[1]
当您执行
B[0][1]
操作时,您正在访问第一个元素,然后使用[1]
对其进行索引,就像您执行了book_1[1]
。错误告诉您这是非法的,因为您没有在类中实现__getitem__
注意事项:
您通常不希望对对象数组使用numpy。与{}相比,它们没有任何优势,在附加元素时也有一些缺点
多维numpy数组的索引是通过单个索引完成的(与列表不同,列表一次只支持一个维度)。所以,如果
B
真的是2D,你就可以做B[0, 1]
。虽然您可以做B[0][1]
,但实际上它做的事情与B[0, 1]
有些不同B[0]
是数组第一行的视图B[0][1]
是该视图的一个元素。这通常与原始文件位于相同的缓冲区中,但根据内存布局和使用的索引类型,这两种方法可能会产生令人惊讶的不同结果相关问题 更多 >
编程相关推荐