对于一个项目,我有一定数量的订单进来,我正在尝试计算每个总数的总数。在将矩阵的每列(每个项目的数量)乘以设定常数(每个价格与矩阵中的不同列相关)之后,我想将每行中的所有单元格相加,以便我可以找到每个总价格每个订单。这是我到目前为止的代码:
%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'。"
答案 0 :(得分:4)
" 将矩阵中的列乘以不同的常量(每列),然后在Matlab中对每一行求和?"
一个符号,*
将执行此操作,(在评论中提到为矢量矩阵产品)
您要计算的内容相当于
orderTotalPrice = candyPrice*matA
其中candyPrice是1xn向量,matA是nxm(n是项目类型的数量,m是订单数量......)
要将此方法与单元格A一起使用,我们需要
所以执行所有这一切的单行是:
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
答案 1 :(得分:0)
使用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);
答案 2 :(得分:0)
首先,orderNumber不应该与任何东西相乘,否则就没有任何意义。
因此,我认为size(candyPrice,2)
等于size(A,2)-1
然后矢量化代码如下:
orderTotalPrice = sum(repmat(candyPrice,[size(A,1) 1]).*A(:,2:end),2);