我是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基本上是相同的矩阵。为什么呢?
答案 0 :(得分:2)
当我用以下内容替换问题行时:
print(np.dot(x_i, m_j).shape)
重复打印(2,)
。
ker[i, j]
取1个值; 2个值为sequence
。
请在不同的点给我们数组的维度,例如myarray
(我猜测并试过(3,4)),并在问题点。 print(...shape)
是numpy
中必不可少的调试工具。
你需要帮助才能找出原因(2,)
吗?我是否可以建议在交互式shell中循环,在整个过程中的各个点处查看形状。
dot
的2个输入看起来像:
(1.0, array([ 1., 1.]))
一个标量和一个2元素数组 - 所以dot
也是一个2元素数组。
你需要解释你期望这两个数组的大小,以及你期望dot
的大小。实际上我们可以得到结果 - 它必须是(1,)
或标量 - 1值放在一个插槽ker
中。
您可以使用单个dot
产品替换双重迭代(或者如果需要进行einsum
调用)。但是让我们先完成这个迭代。