我正在尝试创建一个形状数组 (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 npimport math L = 36Inter = 3600n_o_s = 13l_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 zzprint(f(z))任何想法,达伦这就是我的结果,但我只收到 3599 个值而不是所需的 3600 个任何想法?我使用直径输出另一个变量(基本上将 d_o_s 中的直径交换为 i_o_s 中的值)L = 36Inter = 3600n_o_s = 13l_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)/64si = 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 回答

扬帆大鱼
TA贡献1799条经验 获得超9个赞
在 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)
添加回答
举报
0/150
提交
取消