以下代码如何工作?
k = np.array([[ 0., 0.07142857, 0.14285714],
[ 0.21428571, 0.28571429, 0.35714286],
[ 0.42857143, 0.5, 0.57142857],
[ 0.64285714, 0.71428571, 0.78571429],
[ 0.85714286, 0.92857143, 1. ]])
y = np.array([[0, 3, 1, 2],
[2, 1, 0, 3]])
b = k[y]
形状是:
k形:(5,3)
y形状:(2,4)
b形状:(2,4,3)
为什么numpy矩阵会接受另一个矩阵作为其索引,以及如何找到正确的输出?为什么会产生张量呢?
b的输出是
[[[ 0. 0.07142857 0.14285714]
[ 0.64285714 0.71428571 0.78571429]
[ 0.21428571 0.28571429 0.35714286]
[ 0.42857143 0.5 0.57142857]]
[[ 0.42857143 0.5 0.57142857]
[ 0.21428571 0.28571429 0.35714286]
[ 0. 0.07142857 0.14285714]
[ 0.64285714 0.71428571 0.78571429]]]
答案 0 :(得分:4)
整数数组索引允许选择中的任意项 基于其N维索引的数组。每个整数数组 表示该维度的多个索引。
示例 -
x = array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
rows = np.array([[0, 0],
[3, 3]], dtype=np.intp)
columns = np.array([[0, 2],
[0, 2]], dtype=np.intp)
x[rows, columns]
输出 -
array([[ 0, 2],
[ 9, 11]])
在这种情况下,您可以看到我们通过给出元素的“坐标”来选择角元素。如果你试着给一个2d 矩阵它只会评估它 -
x[rows]
输出 -
array([[[ 0, 1, 2],
[ 0, 1, 2]],
[[ 9, 10, 11],
[ 9, 10, 11]]])