首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Python中的不等间距值之间创建等距值?

如何在Python中的不等间距值之间创建等距值?
EN

Stack Overflow用户
提问于 2015-04-04 01:14:08
回答 4查看 3.3K关注 0票数 4

我有一个数组A(变量)的形式:

代码语言:javascript
运行
AI代码解释
复制
A = [1, 3, 7, 9, 15, 20, 24]

现在,我希望在数组A的值之间创建10 (变量)相等间距的值,这样就可以得到表单的数组B:

代码语言:javascript
运行
AI代码解释
复制
B = [1, 1.2, 1.4, ... 2.8, 3, 3.4, 3.8, ... , 6.6, 7, 7.2, ..., 23.6, 24]

从本质上讲,B应该始终具有A的值和A之间的等距值。

我通过使用以下代码解决了这个问题:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
A = np.array([1, 3, 7, 9, 15, 20, 24])
B = []
for i in range(len(A) - 1):
    B = np.append(B, np.linspace(A[i], A[i + 1], 11))
print (B)

但是,NumPy是否已经有任何函数,或者是否有其他更好的方法来创建这样的数组。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-04 01:33:00

使用内插代替级联的替代方法:

代码语言:javascript
运行
AI代码解释
复制
n = 10
x = np.arange(0, n * len(A), n)       # 0, 10, .., 50, 60
xx = np.arange((len(A) - 1) * n + 1)  # 0, 1, .., 59, 60
B = np.interp(xx, x, A)

结果:

代码语言:javascript
运行
AI代码解释
复制
In [31]: B
Out[31]: 
array([  1. ,   1.2,   1.4,   1.6,   1.8,   2. ,   2.2,   2.4,   2.6,
         2.8,   3. ,   3.4,   3.8,   4.2,   4.6,   5. ,   5.4,   5.8,
         6.2,   6.6,   7. ,   7.2,   7.4,   7.6,   7.8,   8. ,   8.2,
         8.4,   8.6,   8.8,   9. ,   9.6,  10.2,  10.8,  11.4,  12. ,
        12.6,  13.2,  13.8,  14.4,  15. ,  15.5,  16. ,  16.5,  17. ,
        17.5,  18. ,  18.5,  19. ,  19.5,  20. ,  20.4,  20.8,  21.2,
        21.6,  22. ,  22.4,  22.8,  23.2,  23.6,  24. ])

这应该比其他解决方案更快,因为它不使用Python循环,也不执行对linspace的多次调用。快速计时比较:

代码语言:javascript
运行
AI代码解释
复制
In [58]: timeit np.interp(np.arange((len(A) - 1) * 10 + 1), np.arange(0, 10*len(A), 10), A)
100000 loops, best of 3: 10.3 µs per loop

In [59]: timeit np.append(np.concatenate([np.linspace(i, j, 10, False) for i, j in zip(A, A[1:])]), A[-1])
10000 loops, best of 3: 94.2 µs per loop

In [60]: timeit np.unique(np.hstack(np.linspace(a, b, 10 + 1) for a, b in zip(A[:-1], A[1:])))
10000 loops, best of 3: 140 µs per loop
票数 8
EN

Stack Overflow用户

发布于 2015-04-04 01:21:02

您可以在列表理解和zip中使用np.concatenate函数,但也可以在最后一个元素中添加np.append

代码语言:javascript
运行
AI代码解释
复制
>>> np.append(np.concatenate([np.linspace(i, j, 10, False) for i,j in zip(A,A[1:])]),A[-1])
array([  1. ,   1.2,   1.4,   1.6,   1.8,   2. ,   2.2,   2.4,   2.6,
         2.8,   3. ,   3.4,   3.8,   4.2,   4.6,   5. ,   5.4,   5.8,
         6.2,   6.6,   7. ,   7.2,   7.4,   7.6,   7.8,   8. ,   8.2,
         8.4,   8.6,   8.8,   9. ,   9.6,  10.2,  10.8,  11.4,  12. ,
        12.6,  13.2,  13.8,  14.4,  15. ,  15.5,  16. ,  16.5,  17. ,
        17.5,  18. ,  18.5,  19. ,  19.5,  20. ,  20.4,  20.8,  21.2,
        21.6,  22. ,  22.4,  22.8,  23.2,  23.6,  24. ])

您还可以使用retstep=True返回(示例,step),其中step是样本之间的间隔。

代码语言:javascript
运行
AI代码解释
复制
>>> np.concatenate([np.linspace(i, j, 10, False,retstep=True) for i,j in zip(A,A[1:])])
array([array([ 1. ,  1.2,  1.4,  1.6,  1.8,  2. ,  2.2,  2.4,  2.6,  2.8]),
       0.2,
       array([ 3. ,  3.4,  3.8,  4.2,  4.6,  5. ,  5.4,  5.8,  6.2,  6.6]),
       0.4,
       array([ 7. ,  7.2,  7.4,  7.6,  7.8,  8. ,  8.2,  8.4,  8.6,  8.8]),
       0.2,
       array([  9. ,   9.6,  10.2,  10.8,  11.4,  12. ,  12.6,  13.2,  13.8,  14.4]),
       0.6,
       array([ 15. ,  15.5,  16. ,  16.5,  17. ,  17.5,  18. ,  18.5,  19. ,  19.5]),
       0.5,
       array([ 20. ,  20.4,  20.8,  21.2,  21.6,  22. ,  22.4,  22.8,  23.2,  23.6]),
       0.4], dtype=object)
票数 3
EN

Stack Overflow用户

发布于 2015-04-04 01:23:29

基本上,这是你最初方法的一个稍微精简的版本:

代码语言:javascript
运行
AI代码解释
复制
print np.hstack(np.linspace(a, b, 10, endpoint=False) for a, b in zip(A[:-1], A[1:]))

输出:

代码语言:javascript
运行
AI代码解释
复制
[  1.    1.2   1.4   1.6   1.8   2.    2.2   2.4   2.6   2.8   3.    3.4
   3.8   4.2   4.6   5.    5.4   5.8   6.2   6.6   7.    7.2   7.4   7.6
   7.8   8.    8.2   8.4   8.6   8.8   9.    9.6  10.2  10.8  11.4  12.
  12.6  13.2  13.8  14.4  15.   15.5  16.   16.5  17.   17.5  18.   18.5
  19.   19.5  20.   20.4  20.8  21.2  21.6  22.   22.4  22.8  23.2  23.6]

endpoint参数控制在两个原始值之间是否有9或10个等距值。

编辑

因为你想要24点结束,你可以像卡士拉那样append它,或者--提出一些变化;) --忘记endpoint参数,从ab生成10 + 1值。这将自动追加24 (因为默认情况下endpoint是真的)。(更新:如Bas所示,您需要现在就用unique包装它.)

代码语言:javascript
运行
AI代码解释
复制
print np.unique(np.hstack(np.linspace(a, b, 10 + 1) for a, b in zip(A[:-1], A[1:])))

[  1.    1.2   1.4   1.6   1.8   2.    2.2   2.4   2.6   2.8   3.
   3.4   3.8   4.2   4.6   5.    5.4   5.8   6.2   6.6   7.    7.2
   7.4   7.6   7.8   8.    8.2   8.4   8.6   8.8   9     9.6  10.2
  10.8  11.4  12.   12.6  13.2  13.8  14.4  15.   15.5  16.   16.5
  17.   17.5  18.   18.5  19.   19.5  20.   20.4  20.8  21.2  21.6
  22.   22.4  22.8  23.2  23.6  24. ]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29444666

复制
相关文章
Java二维数组的输出
(i)输出长度“最小长度为5”,所以当长度<=5时,所得为左对齐的长度为5的固定格式。 (ii)当长度>5时,完全输出,并且如输出结果第二行所示,会紧贴右边数据。
全栈程序员站长
2022/09/05
9630
PHP循环输出二维数组的数据
//下面是一个例子 $g_id = isset($_GET['id'])?$_GET['id']:'1';//定义变量$g_id,使用三元运算符是为了避免出现waring $p_id = ($g_id
Yiiven
2022/12/15
2.1K0
内存中的数组
1、数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。 2、引用变量是访问真实对象的根本方式,如果程序中要访问数组对象本身,则只能通过这个数组的引用变量来访问它。 3、实际的数组对象被存储在堆内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。
程序员云帆哥
2022/05/12
1.1K0
内存中的数组
二维数组的DP问题
问题:平面上有N*M个格子,每个格子中放着一定数量的苹果。你从左上角的格子开始,每一步只能向下走或是向右走,每次走到一个格子上就把格子里的苹果收集起来,这样下去,你最多能收集到多少个苹果
Meet相识
2018/09/12
7720
JNI:如何操作数组
这类函数可以把Java基本类型的数组转换到C/C++的数组,有两种处理方式,一是拷贝一份传回本地代码,另一个是把指向Java数组的指针直接传回到本地代码。处理完本地的数组后,通过Release<TYPE>ArrayElements来释放数组。
BUG弄潮儿
2022/03/08
4700
Numpy 如何操作数组
数组类型 Numpy类型 # --*--coding:utf-8--*-- from numpy import * """ 复数数组 """ a = array([1 + 1j, 2, 3, 4]) # 数组类型 print('type:', a.dtype) # 实部 print(a.real) # 虚部 print(a.imag) # 复共轭 print(a.conj()) """ 指定数组类型 """ a = array([1, 2, 4, 9, 10], dtype=float32) prin
村雨遥
2022/06/15
5830
Numpy 如何操作数组
java输出数组的方法_java怎样输出数组中的所有元素
调用Array.toString(a),返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分开
全栈程序员站长
2022/11/18
4.8K0
操作系统(4)实验0——准备知识、基本内联汇编、扩展内联汇编
建议在虚拟机中使用Ubuntu 16.04来做实验(其实用18或者更新的也行,但是我还是习惯16的Unity桌面)。
太阳影的社区
2021/10/15
7370
内联汇编很可怕吗?看完这篇文章,终结它!
在 Linux 代码中,经常可以看到在 C 代码中,嵌入部分汇编代码,这些代码要么是与硬件体系相关的,要么是对性能有关键影响的。
IOT物联网小镇
2021/05/13
2.4K0
内联汇编很可怕吗?看完这篇文章,终结它!
java——内存中的数组
2、arr=new int[5],这段代码执行完成后,系统会在堆内存中为该数组分配一块内存空间,并初始化值0,如下图所示:
说故事的五公子
2019/09/11
1.1K0
java——内存中的数组
thinkphp模板中数组的输出
$this->assign('design_img',$design_img); //thinkphp 一维数组输出 <foreach name="design_img" item="vo"> <input type="text" name="design_img[]" value="{$vo}" /> </foreach> //二维数组 <volist name="design_img" id="design_img"> {$design_img.name} </volist> //多维数
PM吃瓜
2019/08/12
2.4K0
Java数组在内存中是如何存放的
当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说也是一样的,因为数组也是一个对象;
田维常
2020/04/21
1.7K0
Java数组在内存中是如何存放的
C++二维数组 | 二维数组输出0-6
C++的二维数组是指具有两个下标的数组,有些数据要依赖于两个因素才能惟一地确定,因此才会引入二维数组。
小林C语言
2020/12/01
8270
C++二维数组 | 二维数组输出0-6
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
用户3003813
2018/09/06
2K0
[剑指offer] 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
尾尾部落
2018/09/04
2.2K0
[剑指offer] 二维数组中的查找
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
崩天的勾玉
2021/12/20
1.6K0
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
MickyInvQ
2021/10/26
1.8K0
二维数组中的查找
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1946753
后端码匠
2021/08/18
1.8K0
java中输出数组内容的函数,并将数组内容作为参数_数组的逆序输出
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
2.9K0
PHP 中操作数组的知识点
数组的赋值: PHP中的数组既可以做数组,也可以做键值对字典,且不存在限制,非常灵活.
王瑞MVP
2022/12/28
2.4K0

相似问题

内联asm:“`in”的操作数类型错配

35

内联asm和c数组问题

15

如何获得llvm内联asm操作数类型?

13

aarch64-gcc simd内联asm,结果总是0。

13

内联asm jmp --“指令操作数无效”

319
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档