SciSharp / Numpy.NET

C#/F# bindings for NumPy - a fundamental library for scientific computing, machine learning and AI
Other
691 stars 98 forks source link

NDArray operation '&' #129

Open xiaozhu1988 opened 2 months ago

xiaozhu1988 commented 2 months ago

this is the code i write by C#


var ndarrya = np.array(new double[] { 10, 20, 30, 40, 50, 60,70,80,90,100 });
var conditions = new NDarray<bool>[2];
conditions[0] = ndarrya <= 30;
conditions[1] = (ndarrya > 50)&(ndarrya <= 100);

var choiselist = new NDarray<float>[2];
choiselist[0] = np.array(new float[] { 10 });
choiselist[1] = np.array(new float[] { 20 });
var des = np.select(conditions, choiselist, 0);

there is an error in the following line conditions[1] = (ndarrya > 50)&(ndarrya <= 100); Visual studio warn that 'the operation & can not be userd between NDarray[bool] I just want to know how to write the Multiple Conditions wish for you reply

henon commented 2 months ago

Can you provide the equivalent python snippet for comparison?

xiaozhu1988 commented 2 months ago

Can you provide the equivalent python snippet for comparison?

import numpy as np
data = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100,110,120])
conlist = [data <= 30, (data >=50) & (data < 100), data>=100]
choiselist = [66, 77, 88]
dataReClass = np.select(conlist, choiselist, default=0)
print(dataReClass)

the result is below [66 66 66 0 77 77 77 77 77 88 88 88] sorry for reply so late,

henon commented 2 months ago

The operators were only defined for scalars, now I added overloads for arrays and it works:

        [TestMethod]
        public void IssueByXiaozhu1988()
        {
            //>>> data = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120])
            //>>> (data >= 50) & (data < 100)
            //array([False, False, False, False,  True,  True,  True,  True,  True,
            //       False, False, False])

            var data = np.array(new[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 });
            Console.WriteLine(((data >= 50) & (data < 100)).repr);
            Assert.AreEqual("array([False, False, False, False,  True,  True,  True,  True,  True,\n       False, False, False])", ((data >= 50) & (data < 100)).repr);
            Console.WriteLine(((data >= 50) | (data < 100)).repr);
            Assert.AreEqual("array([ True,  True,  True,  True,  True,  True,  True,  True,  True,\n        True,  True,  True])", ((data >= 50) | (data < 100)).repr);
            Console.WriteLine(((data >= 50) ^ (data < 100)).repr);
            Assert.AreEqual("array([ True,  True,  True,  True, False, False, False, False, False,\n        True,  True,  True])", ((data >= 50) ^ (data < 100)).repr);
        }
xiaozhu1988 commented 2 months ago

thanks for your reply I will try it tomorrow best wishes👌👌👌

---Original--- From: "Meinrad @.> Date: Sun, Sep 1, 2024 16:59 PM To: @.>; Cc: @.**@.>; Subject: Re: [SciSharp/Numpy.NET] NDArray operation '&' (Issue #129)

The operators were only defined for scalars, now I added overloads for arrays and it works: [TestMethod] public void IssueByXiaozhu1988() { //>>> data = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]) //>>> (data >= 50) & (data < 100) //array([False, False, False, False, True, True, True, True, True, // False, False, False]) var data = np.array(new[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 }); Console.WriteLine(((data >= 50) & (data < 100)).repr); Assert.AreEqual("array([False, False, False, False, True, True, True, True, True,\n False, False, False])", ((data >= 50) & (data < 100)).repr); Console.WriteLine(((data >= 50) | (data < 100)).repr); Assert.AreEqual("array([ True, True, True, True, True, True, True, True, True,\n True, True, True])", ((data >= 50) | (data < 100)).repr); Console.WriteLine(((data >= 50) ^ (data < 100)).repr); Assert.AreEqual("array([ True, True, True, True, False, False, False, False, False,\n True, True, True])", ((data >= 50) ^ (data < 100)).repr); }

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

henon commented 2 months ago

Fixed in https://www.nuget.org/packages/Numpy/3.11.1.34