Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Numpy - Fatal编程技术网

Python 非数值数据的numpy与列表

Python 非数值数据的numpy与列表,python,arrays,numpy,Python,Arrays,Numpy,用于数值数据的Numpy数组显然工作得很好,但用于非数值数据的速度慢吗 例如,假设我有一些嵌套的文本数据列表: mammals = ['dog', 'cat', 'rat'] birds = ['stork', 'robin', 'penguin'] animals1 = [mammals, birds] 在访问和操作这些数据时,嵌套列表的列表是否会比numpy数组的等效列表快 import numpy as np animals2 = np.array(animals1) 由于numpy

用于数值数据的Numpy数组显然工作得很好,但用于非数值数据的速度慢吗

例如,假设我有一些嵌套的文本数据列表:

mammals = ['dog', 'cat', 'rat']
birds = ['stork', 'robin', 'penguin']

animals1 = [mammals, birds]
在访问和操作这些数据时,嵌套列表的列表是否会比numpy数组的等效列表快

import numpy as np
animals2 = np.array(animals1)

由于numpy数组被实现为“跨步”数组,其中每个元素都有固定的长度,因此如果转换为numpy数组,则包含几个长字符串的“稀疏”字符串列表将消耗不成比例的内存。但是速度呢?

正如@JoshAdel所指出的,你应该熟悉速度。我相信你是在问这个比较:

>>> import timeit
>>> timeit.timeit('[[x.upper() for x in y] * 10000 for y in animals1]', setup="mammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds]", number=10000)
1.7549941045438686
>>> timeit.timeit("numpy.char.upper(animals2)", setup="import numpy\nmammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds] * 10000\nanimals2=numpy.array(animals1)", number=10000)
221.09816223832195
我根据你的评论更新了测试。这是一个很好的问题,但是您可能只需要使用numpy.char尝试其他一些操作,以了解它的性能。源文件指向具有
\u vec\u string
函数的
.pyd
(dll类型)文件

显然,上面的两个cod片段之间存在差异,numpy执行
numpy.char.upper()
操作所需的时间是python执行
.upper()
字符串方法所需时间的100多倍


timeit
对于这样的小代码片段非常简单。

正如@JoshAdel所指出的,您应该熟悉。我相信你是在问这个比较:

>>> import timeit
>>> timeit.timeit('[[x.upper() for x in y] * 10000 for y in animals1]', setup="mammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds]", number=10000)
1.7549941045438686
>>> timeit.timeit("numpy.char.upper(animals2)", setup="import numpy\nmammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds] * 10000\nanimals2=numpy.array(animals1)", number=10000)
221.09816223832195
我根据你的评论更新了测试。这是一个很好的问题,但是您可能只需要使用numpy.char尝试其他一些操作,以了解它的性能。源文件指向具有
\u vec\u string
函数的
.pyd
(dll类型)文件

显然,上面的两个cod片段之间存在差异,numpy执行
numpy.char.upper()
操作所需的时间是python执行
.upper()
字符串方法所需时间的100多倍


timeit
对于这样的小代码片段使用起来非常简单。

您始终可以使用
timeit
软件包对这类事情进行基准测试。numpy的主要优势在于数值计算的性能。您不太可能看到其他数据类型带来的显著好处,在某些情况下,性能可能会差得多。您可以始终使用
timeit
包对这类数据进行基准测试。numpy的主要优势在于数值计算的性能。您不太可能看到其他数据类型带来的显著好处,在某些情况下,性能可能会更差。如果您使用IPython,您可以使用
%timeit
%timeit
魔术,这非常方便。可能不仅仅是为它们的创建计时,我想知道在
animals2
上是否有比在
amimals1
上更快的操作
char.upper(animals2)
[[x.upper()表示x在y中]表示y在animals1]
中更简单,但并不更快。如果列表/数组大得多,它会改变吗?如果你使用IPython,你可以使用
%timeit
%timeit
魔术,这特别方便。也许不仅仅是为它们的创建计时,我想知道在
动物2
上是否有比在
amimals1
上更快的操作
char.upper(animals2)
[[x.upper()表示x在y中]表示y在animals1]
中更简单,但并不更快。如果列表/数组大得多,它会改变吗?