【问题标题】:What is the value of 10j in SciPy?SciPy 中 10j 的值是多少?
【发布时间】:2018-02-23 14:46:58
【问题描述】:

我正在学习 Python 和 SciPy。我遇到了以下两种表达方式:

a = np.concatenate(([3], [0]*5, np.arange(-1, 1.002, 2/9.0)))

b = np.r_[3,[0]*5,-1:1:10j]

两个表达式输出相同的数组。我不明白第二个表达式中的 10j。它的价值是什么?非常感谢您的帮助。

【问题讨论】:

标签: python arrays numpy scipy


【解决方案1】:

这是创建np.linspace 的简写。

根据docs for np.r_

如果使用切片表示法,语法start:stop:step 等价于括号内的np.arange(start, stop, step)。但是,如果 step 是一个虚数(即100j),则它的整数部分被解释为所需的点数,并且包含 start 和 stop。换句话说,start:stop:stepj 被解释为括号内的np.linspace(start, stop, step, endpoint=1)

因此,对于您的具体情况,-1:1:10j 将导致 (1 - (-1)) / 9 = 0.222222... 的步长大小为以下数组:

>>> np.r_[-1:1:10j]
array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,
        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])

虽然这发生给您的答案与np.arange(-1, 1.002, 2/9.0) 相同,但请注意arange 通常不是创建这样一个数组的好方法,因为在aranges 中使用非整数步长是bad idea

使用非整数步长(例如 0.1)时,结果通常会不一致。对于这些情况,最好使用 linspace。

【讨论】:

  • 非常感谢普拉文!我将检查行空间方法。再次感谢!
  • 好的。感谢您的来信!
【解决方案2】:

给你:引用https://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html

但是,如果 step 是一个虚数(即 100j),则它的整数部分被解释为所需的点数,并且包含 start 和 stop。

【讨论】:

  • 感谢 AnonyXous 提供链接。我使用 Jupityer notebook 进行了几次测试,发现一些与链接中的内容不完全一样的东西。请参阅下面的一个示例文本:np.linspace(-1, 1, 10, endpoint=True)(与 np.r_[-1:1:10j] 相同)。生成的数组有 10 个元素。所以 10 应该是元素的数量,而不是 np.linspace 中的步骤(开始,停止,步骤,端点 = 1)。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2014-06-04
  • 1970-01-01
  • 2011-01-24
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多