首页 > 解决方案 > python numpy 列表操作

问题描述

我有以下 numpy 数组:

import numpy as np
a = np.array([2,15,66,180])

现在,我希望连续元素之间的差异(diff)除以 25,始终小于或等于 1(diff/25 < 0)。

out = some_function(a,25)
out

[2,15,40,65,66,91,116,141,166,180]

有没有智能的pythonic方式来做到这一点?

标签: pythonpython-3.xnumpy

解决方案


Numpyarange函数可能在那里有用,我会按照以下方式进行:

import numpy as np

a = np.array([2,15,66,180])
out = np.array([])
for i in range(len(a)-1):
    out = np.hstack((out,np.arange(a[i],a[i+1],25)))
out = np.hstack((out,a[-1:]))
print(out)

输出:

[   2.   15.   40.   65.   66.   91.  116.  141.  166.  180.]

此解决方案假定 a 是平面数组。

编辑:虽然我注意到我的解决方案产生np.arraydtype float64,即不同的输入 - 根据您的使用情况,它可能是也可能不是问题。对于出现问题的情况,我将代码修改为以下形式:

import numpy as np
a = np.array([2,15,66,180])
print(a.dtype) #int64
out = np.hstack([np.arange(a[i],a[i+1],25) for i in range(len(a)-1)]+[a[-1:]])
print(out) #[  2  15  40  65  66  91 116 141 166 180]
print(out.dtype) #int64

代码也更短,但我保留了原始代码,因为它可能更容易理解。


推荐阅读