Numpy数组切片使用None和冒号:



我想了解切片在numpy中是如何工作的。

A = np.array([0, 1])
B = np.array([0, 1])
B = B[:, None]
print(A[None, :] == B[:, None]) 

python中的代码给出

[[[ True False]]
[[False  True]]]

有人能解释一下为什么会这样吗?

因为B = B[:, None]将数组更改为2d:

A = np.array([0, 1])
B = np.array([0, 1])
C = B[:, None]
print(B, C, sep='n')

输出:

[0 1]
[[0]
[1]]

他们变得不同了。

也:

>>> A[:, None]
array([[0],
[1]])
>>> A[None, :]
array([[0, 1]])
>>> 

是不一样的

[:, None]使其形成(2, 1)形状,[None, :]使其形成(1, 2)形状。

这就是区别,一个是按列转置,一个是按行转置。

同样用于检查相等性,它变为从A[:, None]检查,带有:

array([[0, 0],
[1, 1]])

对于A[None, :],它检查:

array([[0, 1],
[0, 1]])

所以列表的第一行应该是[True, False],因为0 == 0但是0 != 1。第二行是[False, True],因为1 != 0,但1 == 1

当你写B[:, None]时,将B更改为shape=(2,1),并且每个元素位置在一行中;当你写A[None, :]时,将A更改为shape=(1,2),并且每个元素位置在一列中,参见:

B = np.array([0, 1])
B = B[:, None]
#[[0]
# [1]]
A = A[None , :]
# array([[0, 1]])

:

[B[0][0] == A[0][0] , B[0][0] == A[0][1]]
# True , False
[B[1][0] == A[0][0] , B[1][0] == A[0][1]]
# Fale  True

最新更新