Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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:在numpy数组(大数据集)中计算发生次数的更快方法_Python_Arrays_Performance_Numpy_Statistics - Fatal编程技术网

Python:在numpy数组(大数据集)中计算发生次数的更快方法

Python:在numpy数组(大数据集)中计算发生次数的更快方法,python,arrays,performance,numpy,statistics,Python,Arrays,Performance,Numpy,Statistics,我是Python新手。我有一个numpy.array,大小为66049x1(66049行和1列)。这些值从最小到最大排序,属于float类型,其中一些值被重复 我需要确定每个值的出现频率(给定值相等但未超过的次数,例如,X您应该使用np。其中,然后计算得到的索引向量的长度: indices = np.where(x3 <= value) count = len(indices[0]) index=np.其中(x3 对于(100000x1)array,整个脚本只花了很短的时间(~2s)执

我是Python新手。我有一个
numpy.array
,大小为
66049x1
(66049行和1列)。这些值从最小到最大排序,属于
float
类型,其中一些值被重复


我需要确定每个值的出现频率(给定值相等但未超过的次数,例如,X您应该使用
np。其中
,然后计算得到的索引向量的长度:

indices = np.where(x3 <= value)
count = len(indices[0]) 
index=np.其中(x3
对于(
100000x1)
array,整个脚本只花了很短的时间(~2s)执行。我没有时间,但如果您提供执行您的脚本所需的时间,我们可以进行比较

我用
[Counter][2]
从来计算发生的次数,我的经验一直很好(时间方面)。我把它转换成绘图,用
T
转换

您的数据确实有点重复,但您可以尝试对其进行进一步的细化。事实上,它非常快

编辑

使用
cumsum()创建CDF

编辑2

对于绘图,必须明确指定(x,y)。此外,调用
df_p['cumu']
将生成
系列,而不是
数据帧

要正确显示散点图,您需要以下内容:

import numpy as np
import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt

arr = np.random.randint(0, 100, (100000,1))

df = pd.DataFrame(arr)

cnt = Counter(df[0])

df_p = pd.DataFrame(cnt, index=['data']).T


df_p['cumu'] = df_p['data'].cumsum()

df_p.plot(kind='scatter', x='data', y='cumu')

plt.show()

如果计算效率,可以使用numpy函数bincount,它需要整数:

import numpy as np
a=np.random.rand(66049).reshape((66049,1)).round(3)
z=np.bincount(np.int32(1000*a[:,0]))
大约需要1毫秒


尊敬。

查看我的编辑,让我知道你是否在寻找。我根本没有使用箱子,我创建了累计总和来表示CDF,但是我发现一个错误,我没有将其标准化。我之前显示的直方图只是概念证明,实际上没有使用它的值。这不是CDF,我上次编辑(编辑2)是为了向您展示如何绘制分散图。您需要将
df_p.plot()
更改为
plt.scatter(df_p.index,df_p['cumu']/100000)
就像我在聊天中提到的那样。创建一个新问题,因为此帖子只与您原来的帖子相关。这样可以防止在一篇帖子中回答多个问题。
import numpy as np
import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt

arr = np.random.randint(0, 100, (100000,1))

df = pd.DataFrame(arr)

cnt = Counter(df[0])

df_p = pd.DataFrame(cnt, index=['data']).T


df_p['cumu'] = df_p['data'].cumsum()

df_p['cumu'].plot(kind='line')

plt.show()
import numpy as np
import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt

arr = np.random.randint(0, 100, (100000,1))

df = pd.DataFrame(arr)

cnt = Counter(df[0])

df_p = pd.DataFrame(cnt, index=['data']).T


df_p['cumu'] = df_p['data'].cumsum()

df_p.plot(kind='scatter', x='data', y='cumu')

plt.show()
import numpy as np
a=np.random.rand(66049).reshape((66049,1)).round(3)
z=np.bincount(np.int32(1000*a[:,0]))