我正在嘗試創建一個形狀數組 (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
提交
取消