Impression d'un tableau Numpy [fermé]
J'essaie d'imprimer les résultats de certains calculs précédents et j'ai des problèmes en utilisant Numpy pour imprimer correctement les valeurs d'un tableau. Chacune des variables de la boucle est définie précédemment par des calculs, et elle doit exécuter les permutations de vitesse pour obtenir les données pour chaque vitesse par incréments de 0,5 kN.
Le code en question est:
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]),)
Réponses
Bon, ok, je pense que je comprends quel est le but ici. Ce que vous avez, c'est tout un tas de tableaux 1D - ce qui signifie que chacun représente un vecteur (par rapport à une matrice ou un tenseur). Votre objectif est d'imprimer ces valeurs dans un tableau d'une manière très spécifique. Il me semble que la solution rapide est de changer print(kFrm, end="")d'utiliser la même convention que toutes les autres impressions: print('{:12.4f}'.format(kFrm[i]), end=''). Débarrassez-vous de l' np.set_printoptions()appel après cela.
Pourquoi cela arrive-t-il? Je pense que votre code actuel est partiellement basé sur une conversation précédente, mais c'était sans le contexte complet. kFrmest un vecteur comme toutes les autres variables avec i'thlesquelles vous travaillez, vous voulez donc simplement imprimer la valeur de ce vecteur dans cette ligne. Si vous aviez voulu imprimer le vecteur entier comme une seule ligne, alors vous utiliseriez le code tel qu'il est en ce moment.
En passant, vous pourrez peut-être vous épargner des maux de tête (ou, sans doute, introduire plus de maux de tête) en utilisant des pandas . Si vous le faites, vous pouvez faire quelque chose comme ci-dessous. Le seul problème est que vous ne pouvez pas nommer les colonnes de la même manière, vous devez donc nommer vos première et deuxième colonnes Vet VS, au lieu de Vet V:
# 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)
Cela vous donne:
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
Pourquoi traverser tous ces problèmes avec pandas? Je dirais que nous le faisons parce pandasque nous numpyavons fait énormément de travail pour que les choses s'impriment bien. Plus nous pouvons tirer parti de ce travail, plus nous pouvons être convaincus que notre production sera robuste et vraiment belle. Cependant, vous pouvez également décider d'ignorer la seconde moitié de cette réponse et je ne vous en voudrai vraiment pas.