Output operand requires a reduction, but reduction is not enabled

Thanks Martin, this is clear and makes sense. I should have read the
numpy data types more thoroughly and worked it out. Anyway…

My collaborators are writing their Wireless Network Coding bits in
Python. Once I get this block working, I can combined it with the relay
work I was doing and we will have a pretty exciting setup to report!! :slight_smile:

I have one more problem though…

I have

"out_bA1 = output_items[0]


…code

out_bA1[0:len(est_bA1m)] = est_bA1m"

where

out_bA1.shape = (1,)
est_bA1m.shape = (3840,)

I get the error " output operand requires a reduction, but reduction is
not enabled"

Sometimes I get

out_bA1.shape = (2,)
est_bA1m.shape = (3840,)

and I get the error “operands could not be broadcast together with
shapes (2) (3840)”

I wondered if the problem is with ‘forecast’ (which I have not changed
since the template was created by gr_modtool) or having to
set_output_multiple? The scheduling aspect of GNU radio seems complex.

If I use

" out_bA1 = est_bA1m"

Then it runs OK, but the output of the block i.e. output_items[0] is
then no longer altered and 0’s are output.

Many thanks,

David

On 03/11/2014 03:30 PM, David Halls wrote:

Thanks Martin, this is clear and makes sense. I should have read the
numpy data types more thoroughly and worked it out. Anyway…

My collaborators are writing their Wireless Network Coding bits in
Python. Once I get this block working, I can combined it with the relay
work I was doing and we will have a pretty exciting setup to report!! :slight_smile:

That is very interesting to hear – I hope you’ll be publishing some
papers and code around network coding!

out_bA1[0:len(est_bA1m)] = est_bA1m"

out_bA1.shape = (2,)
est_bA1m.shape = (3840,)

and I get the error “operands could not be broadcast together with
shapes (2) (3840)”

I wondered if the problem is with ‘forecast’ (which I have not changed
since the template was created by gr_modtool) or having to
set_output_multiple? The scheduling aspect of GNU radio seems complex.

This is a Python error, basically it’s saying that the arrays have the
wrong shapes.

Note that in your example, out_bA1 has a limited size before you do any
assigning. Make sure you stay within valid index ranges.

If you want to do it very fool-proof (albeit ugly), try:

for i in range(len(out_bA1)):
out_bA1[i] = # whatever
if i (matches whatever condition):
break

If I use

" out_bA1 = est_bA1m"

Then it runs OK, but the output of the block i.e. output_items[0] is
then no longer altered and 0’s are output.

That’s because you’re rebinding out_bA1, and the original buffer is not
written to.

MB

On 03/11/2014 04:24 PM, David Halls wrote:

Please see the papers we’ve submitted so far this year. Not exactly WNC,
yet… We’re putting one together as we speak though.

I am not sure I understand your reply fully…

Len(out_bA1) is only 1 or 2, so I can only set one or two elements?

Is this before or after you assign something? What’s
len(output_items[0])?

How can I extend the length of out_bA1, so I can output all of est_bA1m?

You can’t, not in the work function. You can do things like
set_output_multiple() to influence the size of the output buffer.

Or alternatively Is it possible for me to set

“output_items[0][0:len(est_bA1m)] = est_bA1m”

That would work, if len(est_bA1m) < len(output_items[0]) AND they have
the right “shape” (in matrix terms).

Hi,

Yes, the len(output_items[0]), is either 1 or 2…

If I set_output_multiple to 10, then this value raises to 10.

It is dominated by the fact that one of the inputs to my block is much
lower than the other?? Input[0] is the data stream and has say 768
items, input[1] is the packet average SNR, so it only has 1 or 2 items
in the same period.

Forecast is currently

    For I in range (len(ninput_items_required)):
            Ninput_items_required[i] = noutput_items

Does this need to be altered for my case where I have two inputs with
very different requirements.

If I ever get my head around the scheduler in GNU radio, it will be a
happy day :slight_smile:

D

On 11.03.2014 17:10, David Halls wrote:

Hi,

Yes, the len(output_items[0]), is either 1 or 2…

If I set_output_multiple to 10, then this value raises to 10.

Can you post the entire block code?

M

Hi Martin,

Sorry for the very slow reply. Life is hectic here!

I found that if I removed the SNR input, that provides many few inputs
that the other (its an SNR value per packet, so there is only 1 input
item to this for every 768 to the other input), the output buffer
increases to

Out_bA1.shape(512,)
Est_bA1m.shape(3840,)
Len(out_bA1) = 512

So the output buffer seems dominated by the input that has fewer items
coming in???

I managed to resolve the problem completely by changing

Ninput_items_required[i] = noutput_items/pow(2,13)

In ‘forecast’, perhaps there are more elegant solutions, but this seems
to work fine (there is only one output).

Regards,

David