考虑三个numpy数组。每个numpy数组都是三维的。我们有数组X,数组Y和数组Z。所有这些数组的形状都是一样的。将X、Y和Z的三个匹配元素在同一个位置组合起来就得到了一个坐标。我有一个函数(不是python函数,数学的),它必须在这些位置向量中的一个上运行,并将输出放入另一个名为s的三维数组中。因此,如果数组的定义如下所示:
X = [[[1,2],[3,4]] Y = [[[1,2],[3,4]] Z = [[[1,2],[3,4]]
[[5,6],[7,8]]] [[5,6],[7,8]]] [[5,6],[7,8]]]
则测试点为:
^{pr2}$如果函数s
只是a+b+c
,那么结果矩阵将是:
s=[[[ 3, 6],[ 9,12]]
[[15,18],[21,24]]]
但事实并非如此,我们有一个名为sv
的二维numpy数组。在实际问题中,sv
是一个三维向量的列表,就像我们的位置向量一样。每个位置向量必须从每个支持向量中减去,并减去结果向量的大小,以给出每个向量的分类。什么numpy操作可以用来做到这一点?在
我们从3个组件数组开始}。我将更改示例中的值,使它们具有唯一的值:
x
,y
,和{上面每一个都有
(2,2,2)
的形状,但它们可以是任何(n, m, l)
。这种形状对我们的工艺影响不大。在接下来,我们将三个组件数组组合成一个新的数组
^{pr2}$p
,即“位置向量”,创建一个新的维度i
,它将在三个物理维度上迭代x,y,z所以}(其中{}是向量的物理维度)。在
p[0]
是x
,依此类推,p
具有形状{现在我们看看你的向量列表
sv
,它大概有(N, d)
的形状。让我们用一个小数字来表示N
:好的,上面有点重复,但我想说清楚(请纠正我对你的问题可能产生的任何误解)。在
你想做些改变,}中的
diff
,在这个过程中,你取了n*m*l
中的每一个n*m*l
向量,并从中减去{N
向量。这将给您N*n*m*l
向量,每个向量都有d
个组件。在做减法之前,我们需要将每个维度对齐。在基本上我们想取}轴基本上是相加的。numpy广播的方式是获取数组的形状,并从末尾对齐它们,这样每个数组的最后一个轴对齐,依此类推。要广播,每个大小必须完全匹配,或者必须为空(在左侧)或}的两个数组不会对齐,因为最后一个轴不匹配,但是您可以在第二个轴的末尾添加一个新的占位符轴,使其形状}的值是多少,它都将与
p - sv
,但是我们必须确保它们的形状匹配,这样d
轴对齐,n, m, l
和{1
。也就是说,如果您的形状是(a, b, c)
和(b, c)
,那么就可以了,第二个数组将重复(“广播”)a
次,以匹配第一个数组中形状(b, c)
的不同子数组。您可以使用尺寸长度1
,这将强制定位,因此通常形状(a, b, c)
和{(a, b, 1)
,无论{(a, b, c)
匹配。在我们将形状
(N, d, 1, 1, 1)
赋予sv
,它与p
的(d, n, m, l)
相匹配。这可以通过几种方式实现:然后,我们可以做些不同的事情:
其中{}是{}。现在我们可以将其平方,然后在第二个(
d
)维上求和,得到每个向量的范数/大小:当然,哪个形状是}
(N, n, m, l)
,或者在示例中是{所以,总而言之:
相关问题 更多 >
编程相关推荐