如何将矩阵中的一列乘以不同的常数(每列),然后在Matlab中对每行求和?
对于一个项目,我有一个固定数量的订单,我试图计算每一笔订单的总额。在将矩阵的每一列(每一项的数量)乘以一个设定常数(每个价格属于矩阵中的不同列)之后,我想对每一行中的所有单元格求和,这样我就可以找到每个订单的总价格。这是我目前掌握的代码:如何将矩阵中的一列乘以不同的常数(每列),然后在Matlab中对每行求和?,matlab,matrix,Matlab,Matrix,对于一个项目,我有一个固定数量的订单,我试图计算每一笔订单的总额。在将矩阵的每一列(每一项的数量)乘以一个设定常数(每个价格属于矩阵中的不同列)之后,我想对每一行中的所有单元格求和,这样我就可以找到每个订单的总价格。这是我目前掌握的代码: %A is the matrix of item types and quantities of each item %A = |OrderNumber Kitkat Hershey Reese's ..... Rolo| | 1
%A is the matrix of item types and quantities of each item
%A = |OrderNumber Kitkat Hershey Reese's ..... Rolo|
| 1 3 4 2 ..... 4 |
| 2 4 10 9 ..... 2 |
| 3 7 8 0 ..... 0 |
|..... .... ... ... ..... .....|
candyPrice = [3 4 3 ........];
orderTotalPrice = {};
for i = 1:10
for k = 2:10
orderTotalPrice(i) = A(i,k).*candyPrice(k)+orderTotalPrice;
end
end
当我运行这段代码时,我收到错误消息,说“未定义的函数加上”用于“cell”类型的输入参数。使用p1=bsxfun(@times,A(:,2:end),candyPrice)
来计算所有产品的价格。每种糖果的总订单价格为p2=sum(p1,2)
,总价格为p=sum(p2)
或者,您可以如下方式调整代码:
candyPrice = [3 4 3 ........];
orderTotalPrice = zeros(1,10);
for i = 1:10
for k = 2:10
orderTotalPrice(i) = A(i,k).*candyPrice(k)+orderTotalPrice(i);
end
end
total = sum(orderTotalPrice);
使用p1=bsxfun(@times,A(:,2:end),candyPrice)
计算所有产品的价格。每种糖果的总订单价格为p2=sum(p1,2)
,总价格为p=sum(p2)
或者,您可以如下方式调整代码:
candyPrice = [3 4 3 ........];
orderTotalPrice = zeros(1,10);
for i = 1:10
for k = 2:10
orderTotalPrice(i) = A(i,k).*candyPrice(k)+orderTotalPrice(i);
end
end
total = sum(orderTotalPrice);
首先,orderNumber不应该与任何东西相乘,否则它就没有任何意义 因此,我假设
size(candyPrice,2)
等于size(A,2)-1
然后矢量化代码将如下所示:
orderTotalPrice = sum(repmat(candyPrice,[size(A,1) 1]).*A(:,2:end),2);
首先,orderNumber不应该与任何东西相乘,否则它就没有任何意义 因此,我假设
size(candyPrice,2)
等于size(A,2)-1
然后矢量化代码将如下所示:
orderTotalPrice = sum(repmat(candyPrice,[size(A,1) 1]).*A(:,2:end),2);
问题标题:
“将矩阵中的列乘以不同的常数(每列),然后在Matlab中对每行求和?”
一个符号,*
将完成此操作(如注释中提到的向量矩阵乘积)
您试图计算的内容相当于
orderTotalPrice = candyPrice*matA
其中candyPrice是1xn向量,matA是nxm(n是项目类型的数量,m是订单的数量…)
对于OP的代码
要对单元格A使用此方法,我们需要
- 删除订单号和标题
- 从单元到矩阵的转换
- 转置(将是numitemtypes x nummorders)
orderTotalPrice = candyPrice*cell2mat(A(2:end,2:end)).'
用测试数据
A =
'orderNo' 'item1' 'item2' 'item3'
[ 1] [ 2] [ 1] [ 3]
[ 2] [ 3] [ 2] [ 3]
[ 3] [ 1] [ 3] [ 3]
candyPrice =
100 10 1
我们得到
orderTotalPrice = candyPrice*cell2mat(A(2:end,2:end)).'
orderTotalPrice =
213 323 133
问题标题:
“将矩阵中的列乘以不同的常数(每列),然后在Matlab中对每行求和?”
一个符号,*
将完成此操作(如注释中提到的向量矩阵乘积)
您试图计算的内容相当于
orderTotalPrice = candyPrice*matA
其中candyPrice是1xn向量,matA是nxm(n是项目类型的数量,m是订单的数量…)
对于OP的代码
要对单元格A使用此方法,我们需要
- 删除订单号和标题
- 从单元到矩阵的转换
- 转置(将是numitemtypes x nummorders)
orderTotalPrice = candyPrice*cell2mat(A(2:end,2:end)).'
用测试数据
A =
'orderNo' 'item1' 'item2' 'item3'
[ 1] [ 2] [ 1] [ 3]
[ 2] [ 3] [ 2] [ 3]
[ 3] [ 1] [ 3] [ 3]
candyPrice =
100 10 1
我们得到
orderTotalPrice = candyPrice*cell2mat(A(2:end,2:end)).'
orderTotalPrice =
213 323 133
试试
A{i,k}
?这不正是矩阵向量积吗?还是我误解了这个问题?如果A是一个矩阵,x是一个向量,那么Ax是A的列的总和,用x加权。试着用A{i,k}代替?这不正是矩阵向量积吗?还是我误解了这个问题?如果A是矩阵,x是向量,那么Ax是A的列与x的加权之和。