gpt4 book ai didi

python - array[i][ :] and array[i, :] 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 02:16:26 25 4
gpt4 key购买 nike

我是 python 新手,所以我习惯使用 array[i][j] 而不是 array[i,j]。今天,我按照教程创建的脚本无法正常工作,直到我发现我正在使用

numpy.dot(P[0][:], Q[:][0])

代替

numpy.dot(P[0,:], Q[:,0])

出于某种原因,第二个有效,而第一个给了我一个形状错误。矩阵维度为MxK和KxN。

我尝试同时打印 P[0][:]P[0,:],运行 id()type()P[0][:].shape,但找不到原因。为什么这些东西不同?

我在 Jupyter Notebook 4.3.0 和 Python 2.7.13 上运行它。

最佳答案

在处理 numpy 数组时,您几乎应该始终使用 [i, j] 而不是 [i][j]。在许多情况下,没有真正的区别,但在您的情况下是有区别的。

假设你有这样一个数组:

>>> import numpy as np
>>> arr = np.arange(16).reshape(4, 4)
>>> arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])

当您使用 [:] 时,这相当于一个新 View ,但如果您使用 [1, :][:, 1] 表示获取第二行(列)。粗略地说,这意味着:索引您拥有数字的维度,并保留您拥有 : 的维度:

>>> arr[:]
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])

>>> arr[:, 1] # get the second column
array([ 1, 5, 9, 13])
>>> arr[:][1] # get a new view of the array, then get the second row
array([4, 5, 6, 7])

这是因为 [1] 被解释为 [1, ...] (... 是省略号对象)并且对于 2D,它等同于 [1, :]

这也是行索引仍然有效的原因(因为它是第一个维度):

>>> arr[1, :]  # get the second row
array([4, 5, 6, 7])
>>> arr[1][:] # get the second row, then get a new view of that row
array([4, 5, 6, 7])

关于python - array[i][ :] and array[i, :] 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com