![](/img/trans.png)
[英]ValueError: shapes (2,) and (5,) not aligned: 2 (dim 0) != 5 (dim 0)
[英]ValueError: shapes and not aligned: (dim 2) != 4 (dim 0)
我目前正在编写一个脚本,该脚本执行一些数组操作和建模计算。
我遇到错误并且不确定如何解决它。
from calendar import c
from math import pi
import numpy as np
import pandas as pd
df = pd.read_csv(....file and variables)
omega = 31
MLS = df['gpsAltitude']
rho = (1.225*(np.exp(-0.0296*MLS)/304.8))
R = 6.7
T = df['grossWeight']
Nb = 4
c = 0.39
Arotor = (pi * R**2)
Vinf = df['indicatedAirspeed']
Vtip=omega*R
MRct=T/(rho*Arotor*(Vtip)**2)
Ablade=c*R*Nb
sigma=Ablade/Arotor
beta= df['driftAngle']
MRCTSIGMA=MRct/sigma
MU=Vinf/Vtip
T1 = np.concatenate((np.array([[beta]]),np.array([[MRCTSIGMA]]),np.array([[MU]]),np.array([[np.ones(82832)]])), 1)
T2 = np.concatenate((np.tanh(np.dot(np.array([[0.5]]), np.dot(T_1, np.array([[
-0.00896416974712778], [21.8178612469974],
[-46.4671026803775], [-1.42758902156871]]))))))
这会在 T2 之后产生错误:ValueError:shapes (1,4,82832) and (4,1) not aligned: 82832 (dim 2) != 4 (dim 0)
第二个叉积不喜欢 T1,它有 82832(这是我根据正在读取的文件分配的数组的文件大小)是 3X1,而带浮点数的 np 数组是 2x1。
我如何/在哪里可以分配我的 2x1 数组,以便它读取为 3x1,例如 (82832, 4, 1),这是我认为我需要的。
谢谢你。
我承认你试图做的事情对我来说并不是很清楚,特别是你对 2x1 和 3x1 的引用,所以我将分解推理以确保我理解你的观点并且我的建议是什么你要。
因此,T1 是形状为 (1, 4, 82832) 的矩阵。 第一个维度 1 没有实际意义。 rest 可以看作是一个包含 4 列的表,其中包含“beta”、“MRCTSIGMA”、“MU”的值和一个 1 常量,共 82832 行。 首先,对于每一行,您希望将点积应用于 4 列,常量-0.00896416974712778, 21.8178612469974, -46.4671026803775, -1.42758902156871
。 这似乎是您的主要问题,特别是尺寸不匹配。 可以通过切换两个术语来解决。 这样做,我们甚至可以使用一个简单的浮点列表而不是二维 ndarray,numpy 将处理 rest。这应该会在 (1, 82832) 数组中产生 82832 个单个值。
constants = [-0.00896416974712778, 21.8178612469974, -46.4671026803775, -1.42758902156871]
val_by_constants = np.dot(constants, T1) # shape: (1, 82832)
然后您要将 0.5 的比率应用于此结果。 你真的不需要点积,numpy 可以通过简单的乘法找到它的方式:
halved = val_by_constants * .5
最后,您想对结果应用 tanh function。 还有这个np.concatenate()
调用,我猜你会用它来将 (1, 82832) 的可预见的 output 形状简化为简单的 (82832, )。 如果是这样,有几种方法可以实现, concatenate
是一种,但为了代码清晰起见,我建议在这种情况下使用flatten
。
T2 = np.tanh(halved).flatten() # shape: (82832, )
应该这样做。
如果您更喜欢单线,请与您的版本进行比较:
T2 = np.tanh(.5 * np.dot([-0.00896416974712778,
21.8178612469974,
-46.4671026803775,
-1.42758902156871], T1)).flatten()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.