打印Numpy数组



我正在尝试打印以前一些计算的结果,并且在使用Numpy正确打印数组中的值时遇到了一些问题。循环中的每个变量都是由之前的计算定义的,它需要通过速度排列来获得每个速度的数据,增量为0.5公里。

有问题的代码是:

print('Speed Dependent factors and residuary resistance coefficents')
#output table
#table header
#Top Row

print('V'.center(12),end='')   #the end='' prevents a new line'
print('V'.center(12),end='')
print('FN'.center(12),end='') 
print('CRstdmin'.center(12),end='') 
print('kFrmin'.center(12),end='')
print('CRBTmin'.center(12),end='')
print('CRmin'.center(12),end='')
print('CRstdmean'.center(12),end='')
print('kFrmean'.center(12),end='')
print('CRBTmean'.center(12),end='')
print('CRmean'.center(12),)
#Second Row
print('knots'.center(5),end='')
print('m/s'.center(12), end='')
print('--'.center(12), end='')
print('--'.center(12), end='')
print('--'.center(12), end='')
print('--'.center(12), end='')
print('10^-3'.center(12), end='')
print('--'.center(12), end='')
print('--'.center(12), end='')
print('--'.center(12), end='')
print('10^-3'.center(12))
print('-'*135)
#loop for table cell values
kFrmin=round(kFrmin,5)
for i in range(len(VS)):
print('{:12.1f}'.format(Vskn[i]), end='')
print('{:12.3f}'.format(VS[i]), end='')
print('{:12.4f}'.format(FN[i]), end='') 
print('{:12.4f}'.format(CRstdmin[i]), end='')
print('{:12.4f}'.format(kFrmin), end='')
print('{:12.4f}'.format(CRBTmin[i]), end='')
print('{:12.4f}'.format(CRmin[i]), end='')
print('{:12.4f}'.format(CRstdm[i]), end='')
print(kFrm, end="")
np.set_printoptions() 
#print('{:12.4f}'.format(kFrm), end='')
print('{:12.4f}'.format(CRBTm[i]), end='')
print('{:12.4f}'.format(CRm[i]),)

好吧,好吧,我想我明白这里的目标是什么。你所拥有的是一整堆1D阵列——这意味着每个阵列都代表一个向量(与矩阵或张量相比(。您的目标是以一种非常具体的方式在表中打印这些值。在我看来,快速解决方案是将print(kFrm, end="")更改为使用与所有其他打印相同的约定:print('{:12.4f}'.format(kFrm[i]), end='')。在那之后取消np.set_printoptions()调用。

为什么会发生这种情况?我相信您当前的代码部分基于之前的对话,但没有完整的上下文。kFrm是一个向量,就像您正在处理的所有其他变量一样,所以您只想在该行中打印该向量的i'th值。如果你想把整个矢量打印成一行,然后你就可以使用现在的代码了。

顺便说一句,通过使用熊猫,你可能会省去一些头痛(或者,可以说,会引起更多的头痛(。如果你这样做了,你可以做下面这样的事情。唯一的问题是不能对列进行相同的命名,所以必须将第一列和第二列命名为VVS,而不是VV:

# At the top of your file
import pandas as pd
# All the other stuff
...
kFrmin = round(kFrmin,5)
# Create the data frame,
# mapping name to vector.
# Each entry here represents
# a column in the eventual output
dataframe = pd.DataFrame({
"V": Vskn,
"VS": VS,
"FN": FN,
"CRstdmin": CRstdmin,
"kFrmin": float(kFrmin),  # kFrmin is defined as an int in your
"CRBTmin": CRBTmin,       # code, we need a float
"CRmin": CRmin,
"CRstdmean": CRstdm,
"kFrmean": kFrm,
"CRBTmean": CRBTm,
"CRmean": CRm,
})
# Set some options for printing
with pd.option_context(
"display.max_columns", 11,  # Display all columns
"display.expand_frame_repr", False,  # Don't wrap columns
"display.float_format", "{:>12.4f}".format,  # Default to 4 digits of precision,
):                                               # pad to 12 places
df_str = dataframe.to_string(
index=False,  # Don't print the dataframe index
formatters={
"V": "{:>12.1f}".format,  # V uses 1 digit of precision
"VS": "{:>12.3f}".format, # VS uses 3 digits of precision
}
)
# Everything from here... (see below)
df_str_rows = df_str.split("n")  # Split up the original table string
# Create the unit row values
unit_row = ["knots", "m/s", "--", "--", "--", "--", "10^-3", "--", "--", "", "10^-3"]
# Pad them using right justification
pd_cspace = pd.get_option("column_space")
unit_row_str = (unit_row[0].rjust(pd_cspace) + 
''.join(r.rjust(pd_cspace + 1) for r in unit_row[1:]))
# Insert that new row back into the table string
df_str_rows.insert(1, unit_row_str)
df_str_rows.insert(2, "-" * len(unit_row_str))
df_str = 'n'.join(df_str_rows)
# ... to here was just to include the extra unit row
# and the dash line separating the table. You could ignore
# it if you don't care about those
# Ok now print
print('Speed Dependent factors and residuary resistance coefficents')
print(df_str)

这给了你:

Speed Dependent factors and residuary resistance coefficents
V           VS           FN     CRstdmin       kFrmin      CRBTmin        CRmin    CRstdmean      kFrmean     CRBTmean       CRmean
knots          m/s           --           --           --           --        10^-3           --           --           --        10^-3
----------------------------------------------------------------------------------------------------------------------------------------------
15.0        7.717       0.1893       0.8417       1.0000       0.1870       0.7645       0.8417       1.0000       0.1786       0.7302
15.5        7.974       0.1956       0.8928       1.0000       0.1984       0.8110       0.8928       1.0000       0.1895       0.7746
16.0        8.231       0.2019       0.9502       1.0000       0.2111       0.8631       0.9502       1.0000       0.2017       0.8243
16.5        8.488       0.2083       1.0138       1.0000       0.2253       0.9208       1.0138       1.0000       0.2152       0.8795
17.0        8.746       0.2146       1.0837       1.0000       0.2408       0.9843       1.0837       1.0000       0.2300       0.9401
17.5        9.003       0.2209       1.1598       1.0000       0.2577       1.0535       1.1598       1.0000       0.2461       1.0062
18.0        9.260       0.2272       1.2422       1.0000       0.2760       1.1283       1.2422       1.0205       0.2690       1.0997
18.5        9.517       0.2335       1.3308       1.0000       0.2957       1.2088       1.3308       1.0508       0.2968       1.2132
19.0        9.774       0.2398       1.4257       1.0000       0.3168       1.2950       1.4257       1.0829       0.3276       1.3394
19.5       10.032       0.2461       1.5269       1.0000       0.3393       1.3869       1.5269       1.1167       0.3619       1.4793
20.0       10.289       0.2524       1.6343       1.0000       0.3631       1.4845       1.6343       1.1525       0.3997       1.6340

为什么pandas要经历这么多麻烦?我认为我们这样做是因为pandasnumpy已经做了大量的工作来使东西打印得很好。我们越能利用这项工作,就越有信心我们的产出会很强劲,看起来真的很好。然而,你也可以决定忽略这个答案的后半部分,我真的不会反对你。

最新更新