我正在学习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。它的价值是什么?非常感谢您的帮助。
这是创建np.linspace
的简写。
如果使用切片表示法,则语法
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
通常不是创建这样一个数组的好方法,因为在arange
s中使用非整数步长是bad idea:
使用非整数步骤(例如0.1)时,结果通常不一致。最好在这些情况下使用linspace。
你去吧:引自https://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html
但是,如果step是一个虚数(即100j),那么它的整数部分被解释为所需的点数,并且start和stop是包含的。