假设你的numpy数组如下:
A = [1,1,2,3,4]
你可以简单地执行:
A + .1
以将一个数字添加到每个元素的numpy数组中。
我正在寻找一种方法,以将一个数字添加到只有奇数或偶数索引号A[::2] +1
的数字中,同时保持整个数组不变。
是否可能在没有任何循环的情况下向所有奇数或偶数索引元素添加一个数字?
假设你的numpy数组如下:
A = [1,1,2,3,4]
你可以简单地执行:
A + .1
以将一个数字添加到每个元素的numpy数组中。
我正在寻找一种方法,以将一个数字添加到只有奇数或偶数索引号A[::2] +1
的数字中,同时保持整个数组不变。
是否可能在没有任何循环的情况下向所有奇数或偶数索引元素添加一个数字?
In [43]: A = np.array([1,1,2,3,4], dtype = 'float')
In [44]: A[::2] += 0.1
In [45]: A
Out[45]: array([ 1.1, 1. , 2.1, 3. , 4.1])
请注意,这会修改A
。如果您希望保留原始的A
,请先复制一份:
In [46]: A = np.array([1,1,2,3,4], dtype = 'float')
In [47]: B = A.copy()
In [48]: B[::2] += 0.1
In [49]: B
Out[49]: array([ 1.1, 1. , 2.1, 3. , 4.1])
In [50]: A
Out[50]: array([ 1., 1., 2., 3., 4.])
使用列表推导式可能会起作用。
A = [1,1,2,3,4]
A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]
只需使用三元运算符就能快速且简单地完成。可能不适用于你所使用的Python版本,我记不清它适用于哪些版本。
在Python 2.7.3和Python 3.2.3中进行了检查,输出结果相同:
>>> A = [1,1,2,3,4]
>>> A
[1, 1, 2, 3, 4]
>>> A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]
>>> A
[1, 1.1, 2, 3.1, 4]
A[1::2] += 0.1
或者
A[::-2][::-1] += 0.1