Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy数组的形状与空列表的比较_Python_Arrays_List_Numpy - Fatal编程技术网

Python numpy数组的形状与空列表的比较

Python numpy数组的形状与空列表的比较,python,arrays,list,numpy,Python,Arrays,List,Numpy,我在理解python/numpy在与空列表进行比较时如何转换数组形状时遇到了一些问题,据我所知,空列表是一个隐式的(元素方面的)False比较 在下面的示例中,如果形状不大于1,则在最后一个标注中形状将减少1 z = N.zeros((2,2,1)) z == [] >> array([], shape=(2, 2, 0), dtype=bool) z2 = N.zeros((2,2,2)) z2 ==[] >> False 但是,如果直接与False比较,则得到

我在理解python/numpy在与空列表进行比较时如何转换数组形状时遇到了一些问题,据我所知,空列表是一个隐式的(元素方面的)False比较

在下面的示例中,如果形状不大于1,则在最后一个标注中形状将减少1

z = N.zeros((2,2,1))
z == []

>> array([], shape=(2, 2, 0), dtype=bool)

z2 = N.zeros((2,2,2))
z2 ==[]

>> False
但是,如果直接与False比较,则得到预期的输出

z = N.zeros((2,2,1))
(z == False).shape

>> (2, 2, 2)


z2 = N.zeros((2,2,2))
(z2 == False).shape

>> (2, 2, 1)

这是工作中的普通广播。当你这样做的时候

z = N.zeros((2,2,1))
z == []
[]
被解释为一个形状数组
(0,)
,然后形状相互广播:

(2, 2, 1)
vs    (0,)
由于
(0,)
(2,2,1)
短,因此它会被展开,就像数组被重复复制一样:

   (2, 2, 1)
vs (2, 2, 0)
由于第一个形状中有一个1,而另一个形状中没有一个1,所以第一个形状被“展开”,就好像它被复制了零次一样:

因此,比较结果是一个布尔数组,其形状
(2,2,0)


z
具有形状
(2,2,2)

广播失败,因为长度2轴和长度0轴不能相互广播。NumPy报告它不知道如何执行比较:

>>> numpy.zeros([2, 2, 2]).__eq__([])
NotImplemented
列表也不知道如何进行比较,因此Python使用默认的身份比较,并得到
False


当您与
False
进行比较时:

z = N.zeros((2,2,1))
(z == False).shape

False
被解释为一个形状数组
()
-一个空形状!它被广播到形状
(2,2,1)
,就像被复制到一个充满
False
s的数组中一样,因此结果的形状与
z

相同这是正常的广播工作。当你这样做的时候

z = N.zeros((2,2,1))
z == []
[]
被解释为一个形状数组
(0,)
,然后形状相互广播:

(2, 2, 1)
vs    (0,)
由于
(0,)
(2,2,1)
短,因此它会被展开,就像数组被重复复制一样:

   (2, 2, 1)
vs (2, 2, 0)
由于第一个形状中有一个1,而另一个形状中没有一个1,所以第一个形状被“展开”,就好像它被复制了零次一样:

因此,比较结果是一个布尔数组,其形状
(2,2,0)


z
具有形状
(2,2,2)

广播失败,因为长度2轴和长度0轴不能相互广播。NumPy报告它不知道如何执行比较:

>>> numpy.zeros([2, 2, 2]).__eq__([])
NotImplemented
列表也不知道如何进行比较,因此Python使用默认的身份比较,并得到
False


当您与
False
进行比较时:

z = N.zeros((2,2,1))
(z == False).shape

False
被解释为一个形状数组
()
-一个空形状!这将广播到shape
(2,2,1)
,就像复制到一个充满
False
s的数组中一样,因此结果的形状与
z

相同。我一直认为广播是将输出数组扩展到两个输入数组的最大形状(如果适用)。在这种情况下,情况并非如此。谢谢你的澄清!仅更改尺寸
1
尺寸以匹配其他尺寸。尺寸
2
永远不会扩展为与尺寸
4
匹配。我会将广播序列描述为
(2,2,1),(0,)=>(2,2,1),(1,1,0)=>(2,2,0)
。所有
1
都已更改。我一直认为广播是将输出阵列扩展到两个输入阵列的最大形状(如果适用)。在这种情况下,情况并非如此。谢谢你的澄清!仅更改尺寸
1
尺寸以匹配其他尺寸。尺寸
2
永远不会扩展为与尺寸
4
匹配。我会将广播序列描述为
(2,2,1),(0,)=>(2,2,1),(1,1,0)=>(2,2,0)
。所有
1
已更改。