我想了解切片在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