在下面的代码中,尺寸和尺寸的形状randm是一样的,一维数组(3,) 那么为什么尺寸=(3,3,2)& randm = [ - 1.10343097 -1.31819984 0.20597956]
Q.1为什么不同的括号()vs [] Q.2每个支架的重要性()& []
image = np.array([[[ 0.67826139, 0.29380381],
[ 0.90714982, 0.52835647],
[ 0.4215251 , 0.45017551]],
[[ 0.92814219, 0.96677647],
[ 0.85304703, 0.52351845],
[ 0.19981397, 0.27417313]],
[[ 0.60659855, 0.00533165],
[ 0.10820313, 0.49978937],
[ 0.34144279, 0.94630077]]])
size = np.shape(image)
print (str (size))
print (np.shape(size))
randm = np.random.randn(3)
print (randm)
print (np.shape(randm))
输出 -
(3, 3, 2)
(3,)
[-1.10343097 -1.31819984 0.20597956]
(3,)
答案 0 :(得分:1)
image
是一个多维numpy
数组。它通过嵌套的列表列表(括号和逗号)定义。
image.shape
是一个元组,因此显示为()。
其他答案和所谓的重复,都集中在Python对列表和元组之间的区别。但这需要一个专注的答案。
一个简单的3d数组:
In [244]: x = np.array([[[1,2],[3,4]]])
In [245]: x
Out[245]:
array([[[1, 2],
[3, 4]]])
您可以将形状作为属性或通过函数调用
获取In [246]: x.shape
Out[246]: (1, 2, 2)
In [247]: np.shape(x)
Out[247]: (1, 2, 2)
但是shape
本身没有形状属性。 len(x.shape)
会起作用,因为它是一个元组。
In [248]: (x.shape).shape
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-248-b00338a7f4bf> in <module>()
----> 1 (x.shape).shape
AttributeError: 'tuple' object has no attribute 'shape'
np.shape(...shape)
令人困惑。 np.shape()
首先将其输入转换为数组(如果它还没有)并返回其形状:
In [249]: np.shape(x.shape)
Out[249]: (3,)
所以我通常不会采用这种形状。然而,它确实证明了一个关键点。 (3,)
是1元素元组。 ,
很重要。 0d数组的形状元组是()
。
下一部分制作一个3元素数组
In [250]: np.random.randn(3)
Out[250]: array([ 2.06265058, 0.87906775, -0.96525837])
In [251]: _.shape
Out[251]: (3,)
In [252]: print(__)
[ 2.06265058 0.87906775 -0.96525837]
再次,(3,)形状元组。数组的str
显示使用括号,但省略逗号。这有助于将其与常规列表区分开来。
(还有一个数组类型显示为(),一个结构化数组。但这是一个更高级的主题。)
答案 1 :(得分:0)
()
表示法表示数据类型为tuple
,而[]
表示list
。
此外,元组使用更少的内存,并且在列表可变时是不可变的。
答案 2 :(得分:0)
(1,2,3) -Tuple
[1,2,3] -List
阅读本文以获取有关tuple and list
的更多信息