繁体   English   中英

ValueError:形状和未对齐:(dim 2)!= 4(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM