Python - 列表列表中的列乘積
列乘積指的是資料集特定列中所有值的乘積結果。在資料的表格表示中,例如列表列表或電子表格,每一列通常代表一個變數或特徵,該列中的值代表單個觀察值或測量值。
列乘積與列和或列平均值的概念密切相關,其中,而不是乘法;列中的值相加或取平均值以獲得一個表示列累積效應或集中趨勢的單個值。
計算列乘積時,將特定列中的值相乘以獲得一個表示該列中變數或觀察值的綜合效應的單個值。這在各種資料分析和建模場景中非常有用,例如計算不同產品的銷售數量的總乘積或計算數學模型中變數的乘積。
為了在 Python 中的列表列表中計算列乘積,我們可以使用不同的方法。讓我們詳細瞭解每種方法及其示例。
使用迴圈
如果我們有一個列表列表,其中每個子列表代表一個記錄,子列表中的元素代表不同列中的值,我們可以使用迴圈迭代列並計算每列的乘積。
示例
在這個示例中,我們初始化一個空列表`column_product`來儲存每列的乘積。然後,我們使用迴圈變數`i`迭代每個子列表中元素的索引。對於每一列,我們使用生成器表示式`(record[i] for record in records)`提取該列的值,並使用帶有 lambda 函式的`functools.reduce()`計算列值的乘積。然後將乘積追加到`column_product`列表中。
import functools records = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] column_product = [] num_records = len(records) for i in range(len(records[0])): column_product.append(functools.reduce(lambda x, y: x * y, (record[i] for record in records))) print("The column product of list of lists:",column_product)
輸出
The column product of list of lists: [28, 80, 162]
使用 zip() 和列表推導式
我們可以利用 zip() 函式轉置列表列表,將每列的值組合在一起。然後,我們可以使用列表推導式計算每列的乘積。
示例
在此示例中,zip(*records)轉置列表列表,建立一個迭代器,返回包含每列元素的元組。然後,列表推導式使用functools.reduce()和lambda函式計算每列的乘積,從而生成列乘積列表。
import functools records = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] column_product = [functools.reduce(lambda x, y: x * y, column) for column in zip(*records)] print("The column product of list of lists:",column_product)
輸出
The column product of list of lists: [28, 80, 162]
使用 NumPy
NumPy是 Python 中用於數值計算的最強大的庫之一。它提供了一種高效且簡潔的方法來計算列表列表中的列乘積。我們在 numpy 中有一個名為product()的函式,它有助於計算列乘積。
示例
在這個示例中,我們使用np.array(records)將列表列表轉換為 NumPy 陣列,其中每個子列表代表陣列中的一行。然後,我們使用np.product(arr, axis=0)沿第一個軸(即行)計算乘積,有效地為我們提供了列乘積。
import numpy as np records = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] arr = np.array(records) column_product = np.product(arr, axis=0) print("The column product of list of lists:",column_product)
輸出
The column product of list of lists: [ 28 80 162]