打印numpy数组作为python列表的成员

2024-04-26 04:44:04 发布

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

我在试验numpy数组,我有一个非常简单的例子:

list = [2, 3]
list.append(np.array([3.2, 9.0, 7.6]))

如果我做print(list),它会打印:[2, 3, array([3.2, 9. , 7.6])]

但是如果我做print(list[-1]),它只打印[3.2 9. 7.6] 有人能为我解释一下,如果我打印numpy数组作为python列表的最后一个元素,为什么打印时没有“数组”、括号和数字之间的comas? 非常感谢


Tags: numpy元素列表np数字数组arraylist
3条回答

似乎是因为print函数隐式地调用了它的参数__str__。你知道吗

但是,如果将对象嵌入列表中,为了表示列表中的内容,__repr__将调用列表中的所有元素:

a = np.linspace(0, 10, 11)
print(a)
# [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
print(repr(a))
# array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

您可以在打印时将数组强制转换为列表,array将不会显示:

print([a])  # not good
# array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
print([list(a)])  # better
# [[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]]

这是因为numpy数组在打印时看起来像一个列表。你知道吗

但试试这个:

>>> import numpy as np

>>> l = [2, 3]
>>> l.append(np.array([3.2, 9.0, 7.6]))
>>> isinstance(l[-1], list)
False
>>> l2 = [3, 2]
>>> isinstance(l2, list)
True

您将测试数组实际上不是一个列表。你知道吗

python中的对象通常有两个不同的方法,它们为print返回自己的字符串表示。你知道吗

它们是__str__()__repr__(),它们有不同的用途,您可以阅读here。你知道吗

要打印某些内容,首先必须将其转换为字符串。通常print会尝试使用__str__进行此转换。你知道吗

对列表执行print操作会导致对list.__str__()的调用,然后它会尝试将其所有内部元素转换为字符串以进行打印。列表用于转换这些元素的调用是__repr__()。你知道吗

所以当你print一个list时,list得到每个元素的__repr__,但是当你只打印那个元素时,print得到那个元素的__str__。你知道吗

你看到的是numpy数组中__repr____str__之间的区别。你知道吗

x = np.array([1, 2, 3])
x.__str__()
x.__repr__()

输出:

'[1 2 3]'
'array([1, 2, 3])'

相关问题 更多 >