Mencetak Numpy Array [ditutup]
Saya mencoba mencetak hasil dari beberapa kalkulasi sebelumnya, dan saya mengalami beberapa masalah menggunakan Numpy untuk mencetak nilai dari array dengan benar. Setiap variabel dalam loop ditentukan oleh perhitungan sebelumnya, dan itu perlu dijalankan melalui permutasi kecepatan untuk mendapatkan data untuk setiap kecepatan dalam kenaikan 0,5kn.
Kode yang dimaksud adalah:
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]),)
Jawaban
Benar, oke, saya rasa saya mengerti apa tujuannya di sini. Apa yang Anda miliki adalah sejumlah besar array 1D - artinya masing-masing mewakili vektor (dibandingkan dengan matriks atau tensor). Tujuan Anda adalah untuk mencetak nilai-nilai tersebut dalam tabel dengan cara yang sangat spesifik. Sepertinya saya bahwa perbaikan cepat adalah untuk mengubah print(kFrm, end="")menggunakan konvensi yang sama seperti semua cetakan lainnya: print('{:12.4f}'.format(kFrm[i]), end=''). Singkirkan np.set_printoptions()panggilan setelah itu.
Mengapa ini terjadi? Saya yakin kode Anda saat ini sebagian didasarkan pada percakapan sebelumnya, tetapi itu tanpa konteks lengkap. kFrmadalah vektor seperti semua variabel lain yang Anda kerjakan, jadi Anda hanya ingin mencetak i'thnilai vektor itu di baris itu. Jika Anda ingin mencetak seluruh vektor sebagai satu baris, maka Anda akan menggunakan kode seperti sekarang.
Sebagai catatan tambahan, Anda mungkin bisa menghindari sakit kepala (atau, bisa dibilang, lebih banyak menimbulkan sakit kepala) dengan menggunakan panda . Jika ya, Anda dapat melakukan sesuatu seperti di bawah ini. Satu-satunya hal yang menarik adalah Anda tidak bisa memberi nama kolom dengan hal yang sama, jadi Anda harus memberi nama kolom pertama dan kedua Vdan VS, alih-alih Vdan 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)
Ini memberi Anda:
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
Mengapa harus melalui semua masalah ini dengan pandas? Saya berpendapat kami melakukannya karena pandasdan numpytelah melakukan banyak pekerjaan untuk membuat hal-hal dicetak dengan baik. Semakin kita dapat memanfaatkan pekerjaan itu, semakin yakin kita bahwa hasil kita akan kuat dan benar-benar terlihat bagus. Namun, Anda juga dapat memutuskan untuk mengabaikan paruh kedua dari jawaban ini dan saya benar-benar tidak akan menentang Anda.