-1

我尝试将数组 D_0 与一些系数相乘以获得另一个数组 f_0 但我得到:只有 size-1 数组可以转换为 Python 标量,为什么?为什么我可以将参数 Re 作为向量,尽管我没有初始化它。我也试过 f_0 没有循环,但我得到了同样的错误。

代码:import math import numpy as np

V_dot = np.array([[3, 1, 2, 1]])
rho_air = 1.2
L  = np.array([[10 ,8, 10, 8]])
mu = 1.8*10**-5
delta_P = 1
v_air = np.array([[5 ,3, 5, 3]])
epsilon = 0.2/1000 
m_dot = V_dot * rho_air
D_0 = (4*m_dot/(math.pi*rho_air*v_air))**(1/2)
D_1 = D_0
Re  = (v_air * D_0 * rho_air) / mu
print("Re", Re)
f_0= 0*D_0
for i in range(0, len(D_0)): 
    f_0 = (-2*math.log((epsilon/D_0[i])/3.7065))**-2
print('f_0', f_0,)

回复 [[291346.24815789 130294.00317411 237883.21548704 130294.00317411]]

4

2 回答 2

1

问题是 math.log 只能处理标量,您要使用的是 numpy 库的 log 函数,可以将元素明智地应用于数组。通过 np.log 更改 math.log 如下:

import numpy as np
import math

V_dot = np.array([[3, 1, 2, 1]])
rho_air = 1.2
L  = np.array([[10 ,8, 10, 8]])
mu = 1.8*10**-5
delta_P = 1
v_air = np.array([[5 ,3, 5, 3]])
epsilon = 0.2/1000 
m_dot = V_dot * rho_air
D_0 = (4*m_dot/(math.pi*rho_air*v_air))**(1/2)
D_1 = D_0
Re  = (v_air * D_0 * rho_air) / mu
print("Re", Re)
f_0= 0*D_0
for i in range(0, len(D_0)): 
    f_0 = (-2*np.log((epsilon/D_0[i])/3.7065))**-2
print('f_0', f_0,)
于 2020-12-17T21:36:37.357 回答
0

对于这个新问题,您可以通过做两件事来解决它。首先是创建一个 numpy 数组而不是列表。第二件事,您应该将 all(e) 更改为 e.all(),请参阅以下文档。您可以在以下代码中找到这些更正:

import numpy as np

V_dot = np.array([[3, 1, 2, 1]])
rho_air = 1.2
L  = np.array([[10 ,8, 10, 8]])
mu = 1.8*10**-5
delta_P = 1
v_air = np.array([[5 ,3, 5, 3]])
epsilon = 0.2/1000 
m_dot = V_dot * rho_air
D_0 = (4*m_dot/(math.pi*rho_air*v_air))**(1/2)
D_1 = D_0
Re  = (v_air * D_0 * rho_air) / mu
print("Re", Re)
f_0 = (-2*np.log((epsilon/D_0)/3.7065))**-2
print('f_0', f_0,)
delta_P_tot = delta_P*L
f_1 = f_0
f_2 = 0
e   = np.ones(len(D_0))
while e.all() > 0.0001:
    D_1 = ((f_1 * L)/delta_P_tot )* rho_air * (v_air)**2
    print('D_1', D_1, '[m]')
    Re  = (v_air * D_1 * rho_air) / mu
    print('Re', Re, )
    f_2=(-2*np.log((epsilon/D_1)/3.7065 + 
    2.5226/(Re*np.sqrt(f_1))))**-2
    print('f_2', f_2,)
    e = abs(f_1-f_2)
    print('e', e, )
    f_1 = f_2 
于 2020-12-17T22:38:13.900 回答