Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 固定概率,在单词矩阵中不等于1_Python_Numpy_Matrix_Probability - Fatal编程技术网

Python 固定概率,在单词矩阵中不等于1

Python 固定概率,在单词矩阵中不等于1,python,numpy,matrix,probability,Python,Numpy,Matrix,Probability,我用这些问题的答案创建了一个矩阵——和。有关此错误的类似问题无助于解决 但概率超过1-值错误:概率总和不等于1 请告诉我如何与您分享df的一部分,以确保再现性。 我使用以下代码生成了并发矩阵 # Create matrix my_df = pd.DataFrame(0, columns = words, index = words) for k,v in frequency_list.items(): my_df.at[k[0],k[1]] = v 这个矩阵是10000*10000 然后我转换

我用这些问题的答案创建了一个矩阵——和。有关此错误的类似问题无助于解决

但概率超过1-值错误:概率总和不等于1

请告诉我如何与您分享df的一部分,以确保再现性。

我使用以下代码生成了并发矩阵

# Create matrix
my_df = pd.DataFrame(0, columns = words, index = words)
for k,v in frequency_list.items():
my_df.at[k[0],k[1]] = v
这个矩阵是10000*10000

然后我转换成频率

row_sums = my_df.values.sum(axis = 1)
row_sums[row_sums == 0] = 1
my_prob = my_df/row_sums.reshape((-1,1)) 
my_prob
当我打印一个单词时

my_prob.sum().tail(30)
我的概率大于1

“thy               0.000000
“till              0.002538
**“to              1.109681**
试图正常化

选择单词并生成一个列表

word_the = my_string_prob['the'].tolist()
尝试将概率标准化

sum_of_elements = sum(word_the)
a = 1/sum_of_elements
my_probs_scaled = [e*a for e in word_the]
my_probs_scaled
sum(my_probs_scaled)
### Output 1.000000000000005
这段代码在一个较小的矩阵上工作,在上面的一个问题中,这个矩阵不是那么大和复杂。
谢谢

您可以在python中使用十进制控制浮点数的精度。考虑下面的例子:

from decimal import Decimal as D
from decimal import getcontext
getcontext().prec = 8

word_the = [9, 4, 5, 4]
sum_of_elements = sum(word_the)
a = D(1/sum_of_elements)
my_probs_scaled = [D(e)*a for e in word_the]
print(my_probs_scaled)
print(sum(my_probs_scaled))
输出为:

[Decimal('0.40909091'), Decimal('0.18181818'), Decimal('0.22727273'), Decimal('0.18181818')]
1.0000000

您可以随意使用参数,包括精度。

您可以使用
从十进制输入decimal as D
来避免浮点errors@ParthShah,谢谢,有什么建议可以在我的代码中使用吗?谢谢TypeError:不支持*:“float”和“decimal.decimal”的操作数类型在我的计算机上工作。奇怪。编辑它,你可以再试一次。十进制('0E-55')、十进制('0E-55')、十进制('0E-55')、十进制('0E-55')、十进制('0E-55')、十进制('0E-55')、十进制('0.0030873908'))]1.0000004-正如你所看到的,这次起作用了,但仍然高于1:(是的,这是因为精度是8。如果你把它降低到,比如说6,它起作用了吗?很高兴我能帮助一个绝地武士:)