我是python的新手,所以请耐心等待!
此功能:
def kerf(X,m):
[n_samples, ]= X.shape
n_sa, n_fe = m.shape
ker = np.zeros((n_samples, n_sa))
for i, x_i in enumerate(X):
for j, m_j in enumerate(m):
ker[i, j] = (np.dot(x_i, m_j)) # problem is here!!
return ker
我这样称呼它:
Z=kerf(myarray[0,[0,1]],myarray[:,[0,1]])
ker[i, j] = (np.dot(x_i, m_j))
ValueError: setting an array element with a sequence.
myarray基本上是相同的矩阵。为什么?
当我用替换问题行时
print(np.dot(x_i, m_j).shape)
它重复打印CCD_ 1。
CCD_ 2取1;2的值是CCD_ 3。
请给我们在不同点的数组的维度,例如myarray
(我猜测并尝试了一个(3,4((,以及在问题点。print(...shape)
是numpy
中必不可少的调试工具。
你需要帮助弄清楚为什么是(2,)
吗?我可以建议你在一个互动的外壳中穿过这个环,一路上看不同点的形状吗。
dot
的2个输入看起来像:
(1.0, array([ 1., 1.]))
一个标量和一个2元素数组-所以dot
也是一个2元数组。
您需要解释这两个数组的大小,以及(2,)
0的大小。实际上,我们可以得到结果——它必须是(1,)
或标量-1值,才能放在一个槽ker
中。
您可能可以用单个dot
产品(或者如果需要,可以用einsum
调用(来替换双迭代。但让我们先让这个迭代工作起来。