簡體   English   中英

NumPy中的元素矩陣乘法

[英]Element-wise matrix multiplication in NumPy

我正在進行Python和NumPy的第一次真正的嘗試,以進行一些圖像處理。 我將圖像加載為3維NumPy數組,其中軸0表示圖像帶,而軸1和2表示像素的列和行。 由此,我需要采用代表每個像素的3x1矩陣並執行一些操作,從而產生另一個3x1矩陣,這將用於構建結果圖像。

我的第一種方法(簡化和隨機數據)如下所示:

import numpy as np
import random

factor = np.random.rand(3,3)
input = np.random.rand(3,100,100)
results = np.zeros((3,100,100))

for x in range(100):
    for y in range(100):
        results[:,x,y] = np.dot(factor,input[:,x,y])

但這讓我感到不雅和低效。 有沒有辦法在元素方面做到這一點,例如:

results = np.dot(factor,input,ElementWiseOnAxis0)

在試圖找到這個問題的解決方案時,我遇到了這個問題,這顯然非常相似。 但是,提交人無法解決問題令他們滿意。 我希望自2012年以來某些事情發生了變化,或者我的問題與他們的問題有很大的不同,使其更容易解決。

Numpy數組默認使用逐元素乘法。 查看numpy.einsum和numpy.tensordot。 我想你要找的是這樣的:

results = np.einsum('ij,jkl->ikl',factor,input)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM