首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将j,j+1,j+2设置为a

将j,j+1,j+2设置为a
EN

Stack Overflow用户
提问于 2012-11-07 08:16:07
回答 1查看 152关注 0票数 0

有没有一种短代码有效的方法将两个数组“粘合”在一起,这样如果两个数组的长度不同,那么粘合的乘积必须是这样的,即从较长的值填充到较小的值之间,直到新乘积的长度与两个数组的长度之和相同?或者:有没有一种方法可以创建一个数组,其中x=a j b j,也就是说,取具有值a b的数组,通过在该数组的每个元素之间填充3个j来创建一个新数组,以获得:a j b

有一种显而易见的循环方式,因为我事先知道产品的大小,但我怀疑手头一定有更“数字”的解决方案。

当我想要“粘合”的两个数组的大小相同,而乘积是a j b j c j时,这很容易做到,即可以在下面看到:

代码语言:javascript
复制
np.append(np.zeros((10,1)),np.ones((10,1)),1).reshape(2*10)
array([ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,
    1.,  0.,  1.,  0.,  1.,  0.,  1.])
but you cannot do
np.append(np.zeros((10,1)),np.ones((20,1)),1).reshape(20+10)

如果问题不够清楚,我很抱歉,请告诉我可以澄清的部分,我的英语不好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-07 08:58:13

假设len(A) == nlen(B) == NNn的倍数,即有一些整数m使得N = m*n,你可以这样做:

代码语言:javascript
复制
import numpy as np
A = np.zeros(10)
B = np.ones(20)

n = len(A)
C = np.concatenate([A.reshape(n, 1), B.reshape(n, -1)], axis=1)
C = C.ravel()

这几乎就是你在问题中得到的,但诀窍是将B重塑为(n,m)而不是(N,1) ie (10,2)而不是(20,1)。reshape中的-1是“任何能让它工作的东西”的缩写,这是一种懒惰的B.reshape(n, len(B)//n)方式。

根据你的问题,似乎数组B可能只是同质数组,(即all(B == j)),在这种情况下,你可以这样做:

代码语言:javascript
复制
import numpy as np
A = np.zeros(10)
j = 1.

C = np.zeros([10, 3])
C[:, 0] = A
C[:, 1:] = j
C = C.ravel()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13261455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档