python - 在 Numpy 中创建 cos 和 sin 数组的最有效方法

标签 python arrays numpy

我需要存储一个大小为 n 的数组,其值为 cos(x)sin(x),假设

array[[cos(0.9), sin(0.9)],
      [cos(0.35),sin(0.35)],
      ...]

每对 cos 和 sin 的参数由随机选择给出。就我一直在改进的代码而言,它是这样的:

def randvector():
""" Generates random direction for n junctions in the unitary circle """
    x = np.empty([n,2])
    theta = 2 * np.pi * np.random.random_sample((n))
    x[:,0] = np.cos(theta)
    x[:,1] = np.sin(theta)
    return x

是否有更短或更有效的方法来实现这一目标?

最佳答案

您的代码足够有效。我认为 justhalf 的回答还不错。

为了有效和简短,这段代码怎么样?

def randvector(n):
    theta = 2 * np.pi * np.random.random_sample((n))
    return np.vstack((np.cos(theta), np.sin(theta))).T

更新

附加 cProfile 结果。

justhalf 的

      5 function calls in 4.707 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.001    0.001    4.707    4.707 <string>:1(<module>)
     1    2.452    2.452    4.706    4.706 test.py:6(randvector1)
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
     1    0.010    0.010    0.010    0.010 {method 'random_sample' of 'mtrand.RandomState' objects}
     1    2.244    2.244    2.244    2.244 {numpy.core.multiarray.array}

OP 的

      5 function calls in 0.088 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.088    0.088 <string>:1(<module>)
     1    0.079    0.079    0.088    0.088 test.py:9(randvector2)
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
     1    0.009    0.009    0.009    0.009 {method 'random_sample' of 'mtrand.RandomState' objects}
     1    0.000    0.000    0.000    0.000 {numpy.core.multiarray.empty}

我的

      21 function calls in 0.087 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.087    0.087 <string>:1(<module>)
     2    0.000    0.000    0.000    0.000 numeric.py:322(asanyarray)
     1    0.000    0.000    0.002    0.002 shape_base.py:177(vstack)
     2    0.000    0.000    0.000    0.000 shape_base.py:58(atleast_2d)
     1    0.076    0.076    0.087    0.087 test.py:17(randvector3)
     6    0.000    0.000    0.000    0.000 {len}
     1    0.000    0.000    0.000    0.000 {map}
     2    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
     1    0.009    0.009    0.009    0.009 {method 'random_sample' of 'mtrand.RandomState' objects}
     2    0.000    0.000    0.000    0.000 {numpy.core.multiarray.array}
     1    0.002    0.002    0.002    0.002 {numpy.core.multiarray.concatenate}

关于python - 在 Numpy 中创建 cos 和 sin 数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951956/

相关文章:

python - 当 A 是矩阵时,eig(A) 和 diag(A) 到底返回什么

python - np.add.types列出的字符是什么意思?

python - 处理服务器错误python

python - 改变 tkinter 消息框的大小

java - 将字符串数组中的值相加

javascript - 如何使用javascript从数组中删除多个值?

python - 获取并显示 numpy 数组中一堆 3 channel 图像中的一个图像

python - 在 SymPy 中选择不同的表达式分解

python - 列 'django_migrations.id' 具有不受支持的类型 'serial' [使用 Amazon Redshift]

c# - 如何输出奇数和偶数的数字列表? C#