0

我对 python 编程非常熟悉,但是我发现了一些奇怪的情况,其中以下两行代码提供了不同的结果(假设两个数组是二维的):

A[:][:] = B[:][:]

A[:,:] = B[:,:]

我想知道是否有任何情况,解释。

有什么提示吗?

例子 :

>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> x[1][1]
4                 # expected behavior
>>> x[1,1]
4                 # expected behavior
>>> x[:][1]
array([3, 4])     # huh?
>>> x[:,1]
array([2, 4, 6])  # expected behavior
4

1 回答 1

1

让我们退后一步。尝试这个:

>>> x = np.arange(6)

>>> x
array([0, 1, 2, 3, 4, 5])

>>> x[:]
array([0, 1, 2, 3, 4, 5])

>>> x[:][:]
array([0, 1, 2, 3, 4, 5])

>>> x[:][:][:][:][:][:][:][:][:][:]
array([0, 1, 2, 3, 4, 5])

看起来x[:]等于x。(实际上,x[:]创建了 . 的副本x。)

因此,x[:][1] == x[1]


这是否符合我们的预期?为什么要x[:]副本x?如果您熟悉切片,这些示例应该可以阐明:

>>> x[0:4]
array([0, 1, 2, 3])

>>> x[0:6]
array([0, 1, 2, 3, 4, 5])

>>> x[0:]
array([0, 1, 2, 3, 4, 5])

>>> x[:]
array([0, 1, 2, 3, 4, 5])

我们可以省略0and6并且 numpy 会计算出对我们来说最大尺寸是多少。


关于问题的第一部分,要创建 的副本B您可以执行以下任何操作:

A = B[:, :]
A = B[...]
A = np.copy(B)
于 2019-11-22T06:49:22.330 回答