如果你想知道这个numpy数组是如何创建的,请查看以下问题
假设我有一个numpy数组
,看起来像这样(由这个预处理创建,该数组也被numpy随机打乱)
[[ 3 2 2 ..., 0 0 0] [14 1 0 ..., 0 0 0] [ 3 2 1 ..., 0 0 0] ..., [ 1 1 1 ..., 0 0 0] [ 2 2 2 ..., 0 0 0] [ 1 1 0 ..., 0 0 0]]
我了解数据量很大,它包含600封电子邮件(每封邮件大约包含2000个单词),并对每封邮件中来自互联网的196个常见垃圾邮件单词进行了统计。
我想在Stephen Marsland的K-Means神经网络中使用它,该网络在注释中指出"如果数据中包含(0,0,...0),则无法工作"
,但我不确定这条注释指的是什么?(我以为...
符号与数学中的1...n
相同,即1和n之间有东西)。如果它意味着其他东西,我应该如何处理无效除法问题?谢谢!
我不确定,但我的数据集中有什么东西导致了这个错误
RuntimeWarning: invalid value encountered in divide data = transpose(transpose(data)/normalisers)
回答:
...,
只是表示数据量太大,无法一次性打印到控制台。我认为你链接的代码中的注释意味着,如果你的数据中包含任何全零向量,预处理将无法工作。
如果你的数据中有任何全零特征向量,以下代码将返回True
…
np.any(data.sum(1) == 0)
…假设你的行是数据示例,你的列是特征。
这是发生的情况:
>>> from numpy import *>>> data = array([[0,0,0],[1,2,3],[1,0,1]])>>> normalisers = sqrt(sum(data**2,axis=1))*ones((1,shape(data)[0]))>>> normalisersarray([[ 0. , 3.74165739, 1.41421356]])
然后你就在除以零了。
>>> data = transpose(transpose(data)/normalisers)
一个可能的解决方案是在预处理步骤之前对每个特征加1:
data += 1