如何添加创建同一项目的多个并将它们添加到数组中?

时间:2018-09-11 09:44:42

标签: python arrays

我正在尝试创建形状为(1,inter)的数组[即1行,inter Columns],其中inter是用户输入;

如果您查看下面的代码,

l_o_s, Inter, n_o_s, L, d_o_s全部来自用户输入

n_o_s表示轴的整个长度上具有与l_o_s中的值相对应的长度和与d_o_s中的值相对应的直径的部分数量。

所以

  

第1部分的长度为1.5,直径为3.75

     

第2部分=长度为4.5-1.5 = 3,直径为3.5

     

第3部分=长度7.5-4.5 = 3,直径3.75

等等...

这是轴布置的图像: This is a shaft of length = 36, with 13 sections that have different size diameters

Inter是我在分析中需要的间隔数,在这种情况下,inter是3600,所以我需要一个(1,3600)数组。

si是一个数组,是l_o_s中单个节的长度,系统的总长度(L)和间隔(Inter)的函数(数学)。

这是问题

因此,如果您将所有价值 si = [ 150. 450. 750. 1050. 1350. 1650. 1950. 2250. 2550. 2850. 3150. 3450. 3600.]

我需要一个形状为(1,3600)的数组,其前150个元素都等于第1部分的直径-(3.75),介于150和450之间的元素我需要它们等于第二个部分的直径(3.5)等...

所以我需要与d_o_s中的索引0对应的前150个元素和与d_o_s中的索引1对应的下300个元素,等等...

这是我开始的代码,但我认为不值得讨论。我正在创建一个零数组,其内部内部形状分别对应于150,300,300,300个元素。

import numpy as np
import math 

L = 36
Inter = 3600
n_o_s = 13
l_o_s = np.asarray([1.5,4.5,7.5,10.5,13.5,16.5,19.5,22.5,25.5,28.5,31.5,34.5,36])
d_o_s = np.asarray([3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75])
si = np.asarray((l_o_s/L)*Inter)
print(si)





z = (si.size) 
def f(x):
for i in si:
    zz = np.zeros((x,1,int(i)))
    for j in range(int(z)):
        for p in range(int(d_o_s[j])):
            zz[j][0][p] = np.full((1,int(i)),(math.pi*d_o_s**4)/64)
return zz


print(f(z))

任何想法, 达伦

这就是我最终得到的结果,但是我只收到3599个值,而不是必需的3600个点子?我使用直径来输出另一个变量(基本上将d_o_s中的直径替换为i_o_s中的值)

L = 36
Inter = 3600
n_o_s = 13
l_o_s = np.asarray([0,1.5,4.5,7.5,10.5,13.5,16.5,19.5,22.5,25.5,28.5,31.5,34.5,36])
d_o_s = np.asarray([3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75,3.5,3.75])
i_o_s = (math.pi*d_o_s**4)/64
si = np.asarray((l_o_s/L)*Inter)

lengths = si[1:] - si[:-1]

Iu = np.asarray(sum([[value]*(int(length)) for value, length in zip(i_o_s, lengths)], []))
print(Iu,Iu.shape)

1 个答案:

答案 0 :(得分:1)

在python中,类似4 *[1]的操作会产生[1,1,1,1]。因此,您需要计算子数组的长度,创建它们,然后使用sum()对其进行串联。

lengths = si[1:] - si[:-1]

result = sum([
    [value]*length for value, length in zip(d_o_s, lengths)
], [])

此外,您的si数组的类型为float,因此当用作索引时会出现舍入错误。通过更改

将其转换为整数
si = np.asarray((l_o_s/L)*Inter)

si = np.asarray((l_o_s/L)*Inter).astype(int)