如何将矩阵中的一列乘以不同的常数(每列),然后在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的加权之和。