Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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.dtype=int相比,numpy.dtype=object速度非常慢_Python_Numpy_Object_Int - Fatal编程技术网

Python 与numpy.dtype=int相比,numpy.dtype=object速度非常慢

Python 与numpy.dtype=int相比,numpy.dtype=object速度非常慢,python,numpy,object,int,Python,Numpy,Object,Int,我正在使用numpy.dtype=object在numpy数组中输入高值(大于2^70): numpy.array([1], dtype=numpy.object) << 70 array([1180591620717411303424], dtype=object) numpy.array([1],dtype=numpy.object)基于用户的评论: 我正在建立一个个人与视频的位图索引,我有很多 为有限的人群(约100人)播放视频(1000多个)。所以 每个单元格表示该人是否出

我正在使用numpy.dtype=object在numpy数组中输入高值(大于2^70):

numpy.array([1], dtype=numpy.object) << 70
array([1180591620717411303424], dtype=object)

numpy.array([1],dtype=numpy.object)基于用户的评论:


我正在建立一个个人与视频的位图索引,我有很多 为有限的人群(约100人)播放视频(1000多个)。所以 每个单元格表示该人是否出现在视频(1)中或 不是(0)。此表存储在一个文件中。现在我想知道两个 人们是否出现在一起的视频,然后我读了 对应这两个人的行,并按位执行“and” 操作以获取结果并将索引定位到存在“1”的位置。 所以要按位“AND”,我需要将二进制列表转换为 先计算整数,然后计算结果

一个更简单的解决方案是加载二进制数组(此处使用的虚拟数据,shape=persons x videos),然后使用&,比较与两个人(比如person 10和person 37)相对应的两行,最后检索视频索引,其中都出现了:

my_map = numpy.random.randint(0,2,(100, 1000), numpy.bool)
appear_together_in_video_index = numpy.where(my_map[10] & my_map[37])
这样,您只需要处理布尔值(8位),完全避免了大数问题


要回答原来的问题,这真的不是一个公平的比较。由于您的目标是处理大量数据,因此应该在支持如此大量数据的两个解决方案之间执行计时测试。基本的替代方法是将Python int保存在Python列表中,这并不比将它们作为对象存储在numpy数组中更快(也不容易处理)。

根据用户的评论:


我正在建立一个个人与视频的位图索引,我有很多 为有限的人群(约100人)播放视频(1000多个)。所以 每个单元格表示该人是否出现在视频(1)中或 不是(0)。此表存储在一个文件中。现在我想知道两个 人们是否出现在一起的视频,然后我读了 对应这两个人的行,并按位执行“and” 操作以获取结果并将索引定位到存在“1”的位置。 所以要按位“AND”,我需要将二进制列表转换为 先计算整数,然后计算结果

一个更简单的解决方案是加载二进制数组(此处使用的虚拟数据,shape=persons x videos),然后使用&,比较与两个人(比如person 10和person 37)相对应的两行,最后检索视频索引,其中都出现了:

my_map = numpy.random.randint(0,2,(100, 1000), numpy.bool)
appear_together_in_video_index = numpy.where(my_map[10] & my_map[37])
这样,您只需要处理布尔值(8位),完全避免了大数问题


要回答原来的问题,这真的不是一个公平的比较。由于您的目标是处理大量数据,因此应该在支持如此大量数据的两个解决方案之间执行计时测试。基本的替代方法是将Python int保存在Python列表中,这并不比将它们作为对象存储在numpy数组中更快(也不容易处理)。

,您最好的选择可能是
uint64
(仍然太小),或者使用双精度浮点。这里的大图是什么?我正在建立一个个人与视频的位图索引,其中我有很多视频(超过1000个)供有限的一群人观看(大约100个)。因此,每个单元格表示此人是否出现在视频(1)中(0)。此表存储在一个文件中。现在,当我想知道两个人是否一起出现在视频中时,我会读取这两个人对应的行,并执行按位的“and”操作以获得结果,并在有“1”的地方找到索引。因此,按位“AND”操作时,我需要先将二进制列表转换为整数,然后计算结果。如果需要,可以定义这样的自定义数据类型。最好的选择可能是
uint64
(仍然太小),或者使用双精度浮点。这里的大图是什么?我正在建立一个个人与视频的位图索引,其中我有很多视频(超过1000个)供有限的一群人观看(大约100个)。因此,每个单元格表示此人是否出现在视频(1)中(0)。此表存储在一个文件中。现在,当我想知道两个人是否一起出现在视频中时,我会读取这两个人对应的行,并执行按位的“and”操作以获得结果,并在有“1”的地方找到索引。因此,按位“AND”操作时,我需要先将二进制列表转换为整数,然后计算结果。如果需要,您可以定义这样的自定义数据类型。此外,我们可以优化吗?比如如果我想找到所有人一起出现的视频?这将是对我的地图矩阵的每一行进行“和”运算。那么,我们能像做np.sum(axis=0)一样简单地“和”矩阵的每一行吗?谢谢你抽出时间!是的,你可以做我的地图。全部(轴=0)。谢谢@Benjamin!你真是太棒了!还有,我们可以优化吗?比如如果我想找到所有人一起出现的视频?这将是对我的地图矩阵的每一行进行“和”运算。那么,我们能像做np.sum(axis=0)一样简单地“和”矩阵的每一行吗?谢谢你抽出时间!是的,你可以做我的地图。全部(轴=0)。谢谢@Benjamin!你真是太棒了!