Python - անհավասար չափի մատրիցային սյունակի արտադրանք
Այս հոդվածում մենք կիմանանք տարբեր մեթոդների մասին, որոնց միջոցով մենք կարող ենք գտնել անհավասար չափի մատրիցային սյունակների արտադրանք: Մատրիցների հետ աշխատելը շատ տարածված է այնպիսի ոլորտներում, ինչպիսիք են տվյալների վերլուծությունը, մեքենայական ուսուցումը, ուստի կարող են լինել իրավիճակներ, երբ մենք պետք է գտնենք մատրիցային սյունակի արտադրանքը, որը կարող է դժվար առաջադրանք լինել:
Տեսնենք մի քանի օրինակ՝ անհավասար չափի մատրիցայի սյունակի արտադրյալը գտնելու համար
Մեթոդ 1. Օգտագործելով պարզ օղակ
Այս մեթոդում մենք կօգտագործենք պարզ ներդիր հանգույցի հայեցակարգը և կկրկնենք մատրիցային սյունակի միջով և կհաշվենք դրանց արտադրանքը:
Օրինակ
def col_product_loop(mat):
prod = []
max_row_length = max(len(row) for row in mat)
for col in range(max_row_length):
col_product = 1
for row in matrix:
if col < len(row):
col_product *= row[col]
prod.append(col_product)
return prod
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = col_product_loop(mat)
print("Product of column is :", products_col)
Արդյունք
Product of column is: [24, 70, 24, 9]
Բացատրություն
Այստեղ վերը նշված ծրագրում մենք հոգ ենք տանում, որ մենք կրկնում ենք մեծ չափի տողի վրա՝ օգտագործելով max(len(տող) տողի համար մատրիցում: Ներքին օղակի ներսում մենք ավելացրել ենք if պայման՝ ստուգելու համար, թե արդյոք ընթացիկ սյունակի ինդեքսը տողի սահմաններում է: տիրույթ: Եթե այս պայմանը բավարարվում է, ապա մենք բազմապատկում ենք ինդեքսի արժեքը: Այնուհետև ապրանքները պահվում են ցուցակում և վերադարձվում որպես վերջնական արդյունք:
Մեթոդ 2. Օգտագործելով NumPy
Այս մեթոդում մենք կօգտագործենք NumPy-ի հայեցակարգը, որը մեզ տրամադրում է գործողություններ զանգվածների և մատրիցների հետ աշխատելու համար:
Օրինակ
import numpy as np
def col_product_numpy(mat):
max_len = max(len(row) for row in mat)
padded_matrix = [row + [1] * (max_len - len(row)) for row in mat]
return np.product(padded_matrix, axis=0).tolist()
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = col_product_numpy(mat)
print("Product of column is:", products_col)
Արդյունք
Product of column is: [24, 70, 24, 9]
Բացատրություն
Այստեղ վերը նշված ծրագրում մենք ստեղծեցինք նոր մատրիցա, որտեղ բոլոր տողերն ունեն նույն երկարությունը, իսկ ավելի կարճ տողը լրացրինք տողերով: 1 արժեքի ավելացումը չի ազդի վերջնական արդյունքի վրա, քանի որ արժեքը 1-ով բազմապատկելը կհանգեցնի նույն արժեքին: Այնուհետև մենք հաշվարկում ենք սյունակների արտադրյալը:
Մեթոդ 3. Ցուցակի ըմբռնման օգտագործում
Այս մեթոդում մենք կօգտագործենք Ցուցակի ըմբռնման հայեցակարգը, որը մեզ տալիս է ցուցակներ ստեղծելու և սյունակի արտադրյալը հաշվարկելու արդյունավետ միջոց:
Օրինակ
def column_product_comprehension(mat):
max_rw = max(len(row) for row in mat)
return [eval('*'.join(str(row[col]) for row in mat if col < len(row))) for col in range(max_rw)]
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = column_product_comprehension(mat)
print("Product of column is:", products_col)
Արդյունք
Product of column is: [24, 70, 24, 9]
Բացատրություն
Այստեղ վերը նշված ծրագրում մենք օգտագործում ենք ցուցակի ըմբռնման մեթոդը՝ սյունակների վրա կրկնելու համար՝ օգտագործելով միջակայքը (max_rw): Այստեղ max_rw-ն ցանկացած տողի առավելագույն երկարությունն է: Այնուհետև մենք միացնում ենք յուրաքանչյուր տարր սյունակի ներսում յուրաքանչյուր տողի համար, որը գտնվում է տողի ներկայացման մեջ: Այնուհետև մենք օգտագործում ենք eval() մեթոդը արտադրանքը հաշվարկելու համար:
Մեթոդ 4. Օգտագործելով numpy.prod() և np.apply_along_axis()
Այս մեթոդում մենք կօգտագործենք numpy.prod() և np.apply_along_axis() մեթոդը՝ սյունակների արտադրյալը գտնելու համար:
Օրինակ
import numpy as np
def column_product_np_apply(mat):
max_len = max(len(column) for column in mat)
padded_matrix = [column + [1] * (max_len - len(column)) for column in mat]
return np.apply_along_axis(np.prod, axis=0, arr=padded_matrix).tolist()
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = column_product_np_apply(mat)
print("Product of column is:", products_col)
Արդյունք
Product of column is: [24, 70, 24, 9]
Բացատրություն
Այստեղ վերը նշված ծրագրում մենք օգտագործում ենք numpy.prod() և np.apply_along_axis() մեթոդը՝ սյունակի արտադրյալը ստանալու համար: Մենք ավելի կարճ շարքը լցրեցինք դրանցով: 1 արժեքի ավելացումը չի ազդի վերջնական արդյունքի վրա, քանի որ արժեքը 1-ով բազմապատկելը կհանգեցնի նույն արժեքին: Այնուհետև մենք կիրառում ենք np.apply_along_axis՝ np.prod մեթոդով որպես ֆունկցիա և ավելացնում ենք առանցք=0՝ յուրաքանչյուր սյունակի երկայնքով արտադրանքի ֆունկցիան կիրառելու համար:
Մեթոդ 5. Pandas Dataframe-ի օգտագործումը
Այս մեթոդում մենք կօգտագործենք pandas dataframe գրադարանի հայեցակարգը, որը շատ տարածված է տվյալների մանիպուլյացիայի համար: Մենք կօգտագործենք տվյալների շրջանակի օբյեկտը, որը տրամադրվում է pandas dataframe-ի կողմից, որը կարող է կարգավորել անհավասար չափերի մատրիցը:
Օրինակ
import pandas as pd
def column_product_pandas(mat):
df = pd.DataFrame(mat)
return df.product(axis=0).tolist()
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = column_product_pandas(mat)
print("Product of column is:", products_col)
Արդյունք
Product of column is: [24.0, 70.0, 24.0, 9.0]
Բացատրություն
Այստեղ վերը նշված ծրագրում մենք մատրիցը վերածեցինք pandas-ի տվյալների շրջանակի` օգտագործելով pd.DataFrame() և օգտագործեցինք product() ֆունկցիան առանցք=0-ով` հաշվարկելու սյունակների տարրի արտադրյալը:
Մեթոդ 6. ռեկուրսիվ ֆունկցիայի օգտագործում
Այս մեթոդում մենք կօգտագործենք ռեկուրսիայի ֆունկցիայի հայեցակարգը՝ սյունակների արտադրյալը հաշվարկելու համար:
Օրինակ
def column_product_recursive(mat, row_i=0, col_i=0, prod=[]):
if row_i == len(mat):
return prod
if col_i == len(mat[row_i]):
return column_product_recursive(mat, row_i + 1, 0, prod)
current_element = mat[row_i][col_i]
if col_i >= len(prod):
prod.append(current_element)
else:
prod[col_i] *= current_element
return column_product_recursive(mat, row_i, col_i + 1, prod)
mat = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
products_col = column_product_recursive(mat)
print("Product of column is:", products_col)
Արդյունք
Product of column is: [24, 70, 24, 9]
Բացատրություն
Վերոնշյալ ծրագրում մենք կանչեցինք ռեկուրսիայի ֆունկցիա և փոխանցեցինք մատրիցը տողի ինդեքսով և սյունակի ինդեքսով, որն օգտագործվում է մշակվող ընթացիկ տողին և սյունակին հետևելու համար: Մենք օգտագործեցինք հիմնական դեպքը, երբ տողի երկարությունը կհասնի մատրիցայի երկարությանը, ինչը նշանակում է, որ բոլոր տողերը մշակվել են: Այսպիսով, այս դեպքում մենք վերադարձնում ենք ապրանքների ցանկը: Մենք տարրը հանում ենք ընթացիկ ցանկից և բազմապատկում ապրանքների ցանկում առկա տարրի հետ: Այն դեպքում, երբ սյունակի ինդեքսը դառնում է ապրանքների ցանկի երկարությունից մեծ, ապա մենք կցում ենք նոր ցուցակը: Այնուհետև մենք կանչեցինք ռեկուրսիայի ֆունկցիան՝ ավելացնելով հաջորդ սյունակը հաջորդ սյունակի տարրը մշակելու համար:
Եզրակացություն
Այսպիսով, մենք ծանոթանում ենք տարբեր մեթոդների, որոնց միջոցով մենք կարող ենք հաշվարկել ցանկացած անհավասար չափի մատրիցի սյունակի տարրի արտադրյալը: Այս գործողությունն իրականացնելու համար մենք տեսանք տարբեր մեթոդներ, ինչպիսիք են շրջագծումը, ցուցակի ըմբռնումը, ռեկուրսիվը, անհարթությունը: Դուք կարող եք ընտրել վերը նշված մեթոդներից որևէ մեկը, որը հարմար է ձեզ համար: