How can i multiply every row to row values?

5 Ansichten (letzte 30 Tage)
Noman Abir
Noman Abir am 3 Jan. 2021
Bearbeitet: dpb am 5 Jan. 2021
I am looking for a way to multiply one row values with every row values.
Let's assume we have:
A=[1 2 3;
4 5 6;
7 8 9]
B=[a b c]
I am looking for a way to have:
C=[1*a 2*b 3*c;
4*a 5*b 6*c;
7*a 8*b 9*c]
Thanks in advance for your comments.

Akzeptierte Antwort

dpb
dpb am 3 Jan. 2021
>> A=reshape(1:9,3,[])
A =
1.00 4.00 7.00
2.00 5.00 8.00
3.00 6.00 9.00
>> B=1:3;
>> A.*B
ans =
1.00 8.00 21.00
2.00 10.00 24.00
3.00 12.00 27.00
>>
Works after TMW implemented automagic vector expansion -- I don't recall which release but has been a few cycles now.
If the above doesn't work on your version, use bsxfun
  12 Kommentare
dpb
dpb am 5 Jan. 2021
That's what I just did above except for the full array -- the row of logical True shows every element matches to machine precision.
>> load y_send.mat
>> c1=ones(1,4);
>> demultiplex_data_y1=bsxfun(@times,c1,y_send);
>> all(y_send(:)==demultiplex_data_y1(:))
ans =
logical
1
>>
Explicitly using the variables instead...same result.
>> demultiplex_data_y1([1:5 end-5:end],:)
ans =
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
1.00 1.00 -1.00 3.00
-1.00 -1.00 -3.00 1.00
-1.00 -1.00 -3.00 1.00
-1.00 -1.00 -3.00 1.00
1.00 -3.00 -1.00 -1.00
1.00 -3.00 -1.00 -1.00
>> y_send([1:5 end-5:end],:)
ans =
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
-3.00 1.00 -1.00 -1.00
1.00 1.00 -1.00 3.00
-1.00 -1.00 -3.00 1.00
-1.00 -1.00 -3.00 1.00
-1.00 -1.00 -3.00 1.00
1.00 -3.00 -1.00 -1.00
1.00 -3.00 -1.00 -1.00
>>
First and last rows of both arrays -- identical as all() already told us.
Whatever you're looking at, bsxfun isn't the problem.
Or, if you can run the above test and show that
all(y_send(:)==demultiplex_data_y1(:))
returns anything other than a logical TRUE (1), then you have uncovered a bug in your release of MATLAB and should upgrade (which really should do, anyways).
dpb
dpb am 5 Jan. 2021
Bearbeitet: dpb am 5 Jan. 2021
Try the following modification to your program and see what happens there...
load('y_send.mat');
y_send;
bit = 4;
levels = 16;
Fs = 44100;
len = length(y_send);
t = 0:1/Fs:(len-1)/Fs;
max_x = 1;
min_x = -1;
step=(max_x-min_x)/levels;
c1 = [ 1 1 1 1 ];
%row to row and bit to bit multiplication of y_send and c1.
demultiplex_data_y1 = bsxfun(@times, c1, y_send);
demultiplex_data_y1;
if any(demultiplex_data_y1(:)~=y_send(:))
disp('ERROR! bsxfun() times failure with unity multiplier')
else
disp('SUCCESS! bsxfun() times with unity multiplier returns original')
end
...
Running it here resulted in
>> receive_cdm
SUCCESS! bsxfun() times with unity multiplier returns original
>>

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2014b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by