Python错误:使用序列设置数组元素

时间:2015-10-05 00:20:04

标签: python arrays python-3.x numpy

我是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基本上是相同的矩阵。为什么呢?

1 个答案:

答案 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调用)。但是让我们先完成这个迭代。