下面是一段代码:
np.concatenate(([3], [0]*5, np.arange(-1, 1.002, 2/9.0)))
# the above outputs
array([ 3. , 0. , 0. , 0. , 0. ,
0. , -1. , -0.77777778, -0.55555556, -0.33333333,
-0.11111111, 0.11111111, 0.33333333, 0.55555556, 0.77777778,
1. ])
虽然这是冗长的,它是相当可以理解的。这里有另一种方法来获得相同的输出,使用(ab)表示法,用复数作为步长。你知道吗
np.r_[3, [0]*5, -1:1:10j]
# the above outputs
array([ 3. , 0. , 0. , 0. , 0. ,
0. , -1. , -0.77777778, -0.55555556, -0.33333333,
-0.11111111, 0.11111111, 0.33333333, 0.55555556, 0.77777778,
1. ])
我试图理解第一种方法中的步长是如何与第二种方法中的复数步长(10j
)等价的。你知道吗
2/9.0 == 10j # how?
我在^{-1:1:10j
意味着我们要在-1:1
之间产生10个值,包括两边。但是,那10j
怎么翻译成0.2222
?你知道吗
另外,我已经看过range-builder-r-slice-with-complex-but-not-imaginary-step-magnitude了,但这并不能提供太多的想法。你知道吗
文档的相关部分是:
这是一个在
numpy/lib/index_tricks.py
(mgrid
是另一个)中的几个类中使用的符号技巧。这不是一般的numpy
或python技巧。使用class
定义(不是函数)和自定义__getitem__
方法是关键。你知道吗至于数字细节,请检查代码中的
np.linspace
。(MATLAB有一个同名函数)。你知道吗也许这种与
arange
的比较会给人一种直观的感觉。你知道吗arange
产生了11个值,因此我们必须在linspace
中使用相同的大小。注意,linspace
对端点的处理更好,从而更清晰地显示浮点值(这两种情况都不精确)。你知道吗如果改用10,则间距正确(.2222…*9=1.9999…)。要得到10个值,我们必须步进9次。或者把范围分成9个区间。你知道吗
arange
带浮点数比以整数开头的等价值更混乱:当您有
start
、stop
(两者都包括在内)和size
时,step
的计算如下:使用
start = -1
、stop = 1
、size = 2
您将获得step = 2
和数组[-1, 1]
使用
start = -1
、stop = 1
、size = 3
您将获得step = 1
和数组[-1, 0, 1]
使用切片
start = -1
、stop = 1
、size = 10
中的-1:1:10j
可以得到step = 2/9
和数组注:对于复数,如
10j
,np.abs公司(10j)将首先计算得到一个实数。你知道吗相关问题 更多 >
编程相关推荐