如何创建和访问对象的numpy数组?

2024-09-26 21:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我的代码会解释我想做什么:

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

做这件事最好的方法是什么


Tags: 代码selfreturninitdefnppagesclass
1条回答
网友
1楼 · 发布于 2024-09-26 21:42:57

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]是该视图的一个元素。这通常与原始文件位于相同的缓冲区中,但根据内存布局和使用的索引类型,这两种方法可能会产生令人惊讶的不同结果

相关问题 更多 >

    热门问题