猿问

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

我正在尝试创建一个形状数组 (1, inter) [即 1 row, 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

等等……

这是轴排列的图像:

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)


皈依舞
浏览 173回答 1
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)
随时随地看视频慕课网APP

相关分类

Python
我要回答