In một mảng Numpy [đã đóng]

Nov 03 2020

Tôi đang cố gắng in kết quả của một số phép tính trước đó và đang gặp một số vấn đề khi sử dụng Numpy để in các giá trị ra khỏi một mảng một cách chính xác. Mỗi biến trong vòng lặp được xác định bằng các phép tính trước đó và nó cần chạy qua các hoán vị tốc độ để nhận dữ liệu cho mỗi tốc độ theo gia số .5kn.

Mã được đề cập là:

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]),)

Trả lời

AdamKern Nov 03 2020 at 22:39

Đúng, được rồi, tôi nghĩ tôi hiểu mục tiêu ở đây là gì. Những gì bạn có là một loạt các mảng 1D - nghĩa là mỗi mảng đại diện cho một vectơ (so với ma trận hoặc tensor). Mục tiêu của bạn là in các giá trị đó trong bảng theo một cách rất cụ thể. Dường như với tôi rằng việc sửa chữa nhanh chóng là thay đổi print(kFrm, end="")để sử dụng quy ước giống như tất cả các bản in khác: print('{:12.4f}'.format(kFrm[i]), end=''). Thoát khỏi np.set_printoptions()cuộc gọi sau đó.

Tại sao chuyện này đang xảy ra? Tôi tin rằng mã hiện tại của bạn một phần dựa trên cuộc trò chuyện trước đó, nhưng điều đó không có ngữ cảnh đầy đủ. kFrmlà một vectơ giống như tất cả các biến khác mà bạn đang làm việc, vì vậy bạn chỉ muốn in i'thgiá trị của vectơ đó trong hàng đó. Nếu bạn muốn in toàn bộ vectơ dưới dạng một hàng, thì bạn sẽ sử dụng mã như hiện tại.

Một lưu ý nhỏ là bạn có thể tự giảm bớt cơn đau đầu (hoặc có thể nói là gây thêm đau đầu) bằng cách sử dụng gấu trúc . Nếu bạn làm, bạn có thể làm một cái gì đó như dưới đây. Trở ngại duy nhất là bạn không thể đặt tên cột điều tương tự, vì vậy bạn phải đặt tên cho cột đầu tiên và thứ hai của bạn VVS, thay vì 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)

Điều này mang lại cho bạn:

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

Tại sao phải trải qua tất cả những rắc rối này với pandas? Tôi cho rằng chúng tôi làm như vậy bởi vì pandasnumpyđã thực hiện một lượng lớn công việc để làm cho mọi thứ được in ấn độc đáo. Chúng ta càng có thể tận dụng công việc đó, chúng ta càng có thể tự tin rằng đầu ra của chúng ta sẽ mạnh mẽ và thực sự tốt. Tuy nhiên, bạn cũng có thể quyết định bỏ qua nửa sau của câu trả lời này và tôi thực sự sẽ không chống lại bạn.