我正在嘗試計算這種型別的計算:
arr = np.arange(4)
# array([0, 1, 2, 3])
arr_t =arr.reshape((-1,1))
# array([[0],
# [1],
# [2],
# [3]])
mult_arr = np.multiply(arr,arr_t) # <<< the multiplication
# array([[0, 0, 0, 0],
# [0, 1, 2, 3],
# [0, 2, 4, 6],
# [0, 3, 6, 9]])
最終在一個更大的單行矩陣索引中執行它,并對所有由計算再現的矩陣求和:
arr = np.random.random((600,150))
arr_t =arr.reshape((-1,arr.shape[1],1))
mult = np.multiply(arr[:,None],arr_t)
summed = np.sum(mult,axis=0)
summed
到目前為止,它完全是令人敬畏的,當我嘗試在更大的資料集上進行轉換時,問題就開始了,例如這個陣列:
arr = np.random.random((6000,1500))
我收到以下錯誤 -MemoryError: Unable to allocate 101. GiB for an array with shape (6000, 1500, 1500) and data type float64
這是有道理的,但我的問題是:
無論如何我都可以解決這個問題而不必被迫使用完全減慢行程的回圈嗎?
我的問題主要是關于需要長時間運行任務超過 30 秒的性能和解決方案不是一個選項。
uj5u.com熱心網友回復:
看起來您只是在嘗試執行點積:
arr.T@arr
或者
arr.T.dot(arr)
檢查這是你想要的
arr = np.random.random((600,150))
arr_t =arr.reshape((-1,arr.shape[1],1))
mult = np.multiply(arr[:,None],arr_t)
summed = np.sum(mult,axis=0)
np.allclose((arr.T@arr), summed)
# True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369788.html
