Inplace Element Structure 2D Array

I would like to use the in place element structure to alter each element of a 2D array.  I need to minimize buffer allocations as the array is pretty large but cannot figure out the appropriate way to do this.  Any thoughts will be appreciated!
Cheers!
CLA, CLED, CTD,CPI, LabVIEW Champion
Platinum Alliance Partner
Senior Engineer
Using LV 2013, 2012
Don't forget Kudos for Good Answers, and Mark a solution if your problem is solved.

Looks like I posted too soon.  I answered my own question.
Cheers
CLA, CLED, CTD,CPI, LabVIEW Champion
Platinum Alliance Partner
Senior Engineer
Using LV 2013, 2012
Don't forget Kudos for Good Answers, and Mark a solution if your problem is solved.
Attachments:
2D In Place Element.vi ‏11 KB

Similar Messages

  • I want to create an array that goes into a case structure where each element in the array is an individual case and gets done in order

    I want to create an array that goes into a case structure where each element in the array is an individual case and gets done in order. Any ideas, I've been playing with the idea but have had no luck, is this even possible?

    Hi,
    Please check it out the attached Vi.. Is this you need?
    Sasi.
    Certified LabVIEW Associate Developer
    If you can DREAM it, You can DO it - Walt Disney
    Attachments:
    Event.vi ‏11 KB

  • Crash when use indexe array with in place element structure

    Hello !
    I have a problem with in place element structure. I want index a waveform array (16 elements) and when i execute or save that labview close....
    I dont have problem with waveform array 15 elements or less, but i need index 16 elements...
    Thanks for your help !!!
    Solved!
    Go to Solution.
    Attachments:
    Test.PNG ‏8 KB

    I give you my code but it work because i used a waveform array with only 15 elements. I can't save or execute with 16 elements...
    So add it (like picture Test.png) and you will see.
    Thank you
    Attachments:
    Test.vi ‏25 KB

  • In-Place Element Structures, References and Pointers, Compiler Optimization, and General Stupidity

    [The title of this forum is "Labview Ideas". Although this is NOT a direct suggestion for a change or addition to Labview, it seems appropriate to me to post it in this forum.]
    In-Place Element Structures, References and Pointers, Compiler Optimization, and General Stupidity
    I'd like to see NI actually start a round-table discussion about VI references, Data Value references, local variables, compiler optimizations, etc. I'm a C programmer; I'm used to pointers. They are simple, functional, and well defined. If you know the data type of an object and have a pointer to it, you have the object. I am used to compilers that optimize without the user having to go to weird lengths to arrange it. 
    The 'reference' you get when you right click and "Create Reference" on a control or indicator seems to be merely a shorthand read/write version of the Value property that can't be wired into a flow-of-control (like the error wire) and so causes synchronization issues and race conditions. I try not to use local variables.
    I use references a lot like C pointers; I pass items to SubVIs using references. But the use of references (as compared to C pointers) is really limited, and the implementation is insconsistent, not factorial in capabilites, and buggy. For instance, why can you pass an array by reference and NOT be able to determine the size of the array EXCEPT by dereferencing it and using the "Size Array" VI? I can even get references for all array elements; but I don't know how many there are...! Since arrays are represented internally in Labview as handles, and consist of basically a C-style pointer to the data, and array sizing information, why is the array handle opaque? Why doesn't the reference include operators to look at the referenced handle without instantiating a copy of the array? Why isn't there a "Size Array From Reference" VI in the library that doesn't instantiate a copy of the array locally, but just looks at the array handle?
    Data Value references seem to have been invented solely for the "In-Place Element Structure". Having to write the code to obtain the Data Value Reference before using the In-Place Element Structure simply points out how different a Labview reference is from a C pointer. The Labview help page for Data Value References simply says "Creates a reference to data that you can use to transfer and access the data in a serialized way.".  I've had programmers ask me if this means that the data must be accessed sequentially (serially)...!!!  What exactly does that mean? For those of use who can read between the lines, it means that Labview obtains a semaphore protecting the data references so that only one thread can modify it at a time. Is that the only reason for Data Value References? To provide something that implements the semaphore???
    The In-Place Element Structure talks about minimizing copying of data and compiler optimization. Those kind of optimizations are built in to the compiler in virtually every other language... with no special 'construct' needing to be placed around the code to identify that it can be performed without a local copy. Are you telling me that the Labview compiler is so stupid that it can't identify certain code threads as needing to be single-threaded when optimizing? That the USER has to wrap the code in semaphores before the compiler can figure out it should optimize??? That the compiler cannot implement single threading of parts of the user's code to improve execution efficiency?
    Instead of depending on the user base to send in suggestions one-at-a-time it would be nice if NI would actually host discussions aimed at coming up with a coherent and comprehensive way to handle pointers/references/optimization etc. One of the reasons Labview is so scattered is because individual ideas are evaluated and included without any group discussion about the total environment. How about a MODERATED group, available by invitation only (based on NI interactions with users in person, via support, and on the web) to try and get discussions about Labview evolution going?
    Based solely on the number of Labview bugs I've encountered and reported, I'd guess this has never been done, with the user community, or within NI itself.....

    Here are some articles that can help provide some insights into LabVIEW programming and the LabVIEW compiler. They are both interesting and recommended reading for all intermediate-to-advanced LabVIEW programmers.
    NI LabVIEW Compiler: Under the Hood
    VI Memory Usage
    The second article is a little out-of-date, as it doesn't discuss some of the newer technologies available such as the In-Place Element Structure you were referring to. However, many of the general concepts still apply. Some general notes from your post:
    1. I think part of your confusion is that you are trying to use control references and local variables like you would use variables in a C program. This is not a good analogy. Control references are references to user interface controls, and should almost always be used to control the behavior and appearance of those controls, not to store or transmit data like a pointer. LabVIEW is a dataflow language. Data is intended to be stored or transmitted through wires in most cases, not in references. It is admittedly difficult to make this transition for some text-based programmers. Programming efficiently in LabVIEW sometimes requires a different mindset.
    2. The LabVIEW compiler, while by no means perfect, is a complicated, feature-rich set of machinery that includes a large and growing set of optimizations. Many of these are described in the first link I posted. This includes optimizations you'd find in many programming environments, such as dead code elimination, inlining, and constant folding. One optimization in particular is called inplaceness, which is where LabVIEW determines when buffers can be reused. Contrary to your statement, the In-Place Element Structure is not always required for this optimization to take place. There are many circumstances (dating back years before the IPE structure) where LabVIEW can determine inplaceness and reuse buffers. The IPE structure simply helps users enforce inplaceness in some situations where it's not clear enough on the diagram for the LabVIEW compiler to make that determination.
    The more you learn about programming in LabVIEW, the more you realize that inplaceness itself is the closest analogy to pointers in C, not control references or data references or other such things. Those features have their place, but core, fundamental LabVIEW programming does not require them.
    Jarrod S.
    National Instruments

  • How can I change all Inf elements in an array to a specific value?

    I would like to change all Inf elements in my array to -1. Basically, I am looking for something similar to the range and coerce function, except that I want all values above a certain value to be a specific negative value, rather than go to that value.
    I could use a case structure and go through each element in the array, but I am hoping to find something more efficient.Any ideas?
    Solved!
    Go to Solution.

    P@Anand wrote:
    I would do that in this way.
    Here's a simpler version...
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines
    Attachments:
    Replace in Array.png ‏4 KB

  • Append a constant string to every element in an array

    Hi Friend,
    I have a small stuck in my labview program that is I need to append a constant string to each element of an array. Could someone provide guidance on this? Prior thanks to your help.
    Have a nice day!
    Lee Joon

    Pass the array into a for loop with autoindexing; concatenate each element with the constant and then use the array output from the loop...
    I was a few seconds behind the post above; great minds think alike!
    Message Edited by Phillip Brooks on 11-15-2007 08:42 AM
    Now is the right time to use %^<%Y-%m-%dT%H:%M:%S%3uZ>T
    If you don't hate time zones, you're not a real programmer.
    "You are what you don't automate"
    Inplaceness is synonymous with insidiousness
    Attachments:
    Append String.gif ‏33 KB

  • How many elements in an array?

    Sounds like a simple question, right?
    Apparently not.
    LV 2010
    I have a huge data structure, stored in DataLog files (thousands of them).
    I want to convert this structure to Name/Value pairs ("Operator_Name", "Joe Smith"), for use in a TDMS file.
    The structure is a cluster, with various clusters inside that, and inside those are DBLs, strings, BOOLs, other clusters, arrays, you name it.
    My strategy is to obtain the CONTROLS[ ] property of the outermost cluster and call this VI.
    The VI processes each control, decoding what type it is and handling it accordingly.
    It works fine for STRINGs, NUMERICs, ENUMs, BOOLEANs, COMBOBOXes, TIMESTAMPS, and CLUSTERs.
    For those simple ones, I use the LABEL.TEXT as the NAME and get the value (based on what type it is) as the VALUE.
    For a CLUSTER, I get the CONTROLS[ ] array of the cluster and call myself recursively, to handle all the elements within the sub-cluster.
    That all works fine.
    But to handle an ARRAY, I'm stumped.
    Attached is the code showing the case for an ARRAY.
    What I'm doing is getting the CLASS NAME of the current control.
    I LEGALIZE the label name (turn spaces into underscores, and maybe other special handling later).
    For an ARRAY, I cast the generic CTL reference into an ARRAY reference, and get its VALUE.
    I want to loop over each element of the array, and modify the name by the index number, and process each element.
    There are arrays of STRINGS, arrays of DBLs, arrays of CLUSTERs - all types.
    The question is - how many array elements are there?
    The constant "10" in this diagram is a dummy - just there to see if it works.
    it does work, except that I get 10 sets of answers, whether the real array has 2 or 20 elements.
    I thought the array's VALUE would be an ARRAY of VARIANTs, but no - it's a single VARIANT.
    I can't use VARIANT to DATA on the array's VALUE - I don't know what TYPE the array is.
    I thought maybe the ARRELEM refnum would be NIL if I was past the end, but that's not the case - there's only one refnum for any array element, whether it exists or not.
    If I check for errors, it complains that I cannot set the INDEXVALS property of a strict typedef array, even though it works just fine.
    If there was a method to SELECT ALL on the array, I could use the SELECTION SIZE to figure out how many elements there are, but I see no such method.
    The NUMBER OF ROWS / COLUMNS refers to the number of VISIBLE rows/columns, and has nothing to do with how much data is present.
    So... How do I find out how many elements are in the array?
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks

    The ArrElem reference property is not a reference to any particular element of the array. 
    On the contrary, it is a reference to the element addressed by the current ARRAY INDEX(es).
    That's why my code above can read out the values for element 0, element 1, etc.  I've verified that this works.
    There is only one set of PROPERTIES for the array elements; if you use the ArrElem refnum to set a background color of blue, then ALL elements turn blue, but you can obtain the VALUE of a given element by setting the ARRAY INDEX(es) and accessing via the ArrElem.
    I was thinking that maybe LabVIEW did a trick by setting this to NIL to indicate "no such element", but that's not the case.
    In any case, the question remains: How do I determine how many elements there are?
    The VALUE of the array is a variant: just what is in that package?
    As I said, I don't see how to use VARIANT TO DATA; I don't know what kind of data it is.
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks

  • Summing specified elements in 2D array.

    Hi!
    I have a little problem with summing elements in 2D array… I have signal from 64 sources in the 2D array - 64 colums and (time*sampling) rows. I have to add some deley to every signal (different for each)  and then sum signals from all of the sources. I hope the picture below explains what I have to do:
    What's more - I have a 2D array of delays. By now I'm doing this by creating an 1D array of "0" and then putting in it the 1D signal array at index specified by delay value.
    And it works ok. But... It takes long time... Is there any method to do the summing "at once" for all the delays? Is there sth like "pointer" in array, so I could take elements from the array from specified element?
    Rgds,
    Mordimer 

    One problem with your solution is also that the subset is of variable lenght due to truncation, so the shift register needs to be reallocated whenever the size changes. (Even if you define a lenght for the subset, you run out of elements and the result will be shorter!). You might want to e.g. truncate all to the shortest subset (longest delay) before summing for better inplaceness.
    Why do you have a 2D array of delays? isn't the time spacing of each column constant?
    What is your definition of "takes a long time": microseconds?, minutes?
    Message Edited by altenbach on 12-03-2009 03:20 PM
    LabVIEW Champion . Do more with less code and in less time .

  • Object and in place element structure

    Hi!
    I need some help!
    How can I do the following?
    In the 1.)  Set the new value here - make some changes takes effect the whole array, previously and take effect for the 2. wire?
    I have tried that in place element structure without any success.
    The reason is why I would like to do this is : I wanna avoid the always usage of get - set pairs when I am working with objects, tipically array of objects.
    so my goal is, how to see only 10 values in both arrays?
    My real problem is the following:
    I have an array with objects. The order of the objects is very important, can not be changed. I use a stack - algorithm on the elements. Randomly push many elements into the stack, and randomly pop them. When I pop, I wanna use a set-method on the object, (set something flag/property) . So I want this chage to take effect the memory .
    (If used a simle enable - indexing in the loop, I would lost the real order of the original array.)
    (maybe I can calculate the index of the element what I want to update, but I think there is more easier alternative to do that and I should use the get - set again...)
    +++ In God we believe, in Trance we Trust +++
    [Hungary]
    Solved!
    Go to Solution.

    The native LVOOP implementation is by-val and not by ref.as in most OOP implementations. If you are coming from an OOP background, think like: every time you branch a wire, it creates a clone of the object on the wire (or all the objects in the array in your case). As a general rule, this is the desired behaviour in about 80% of the cases (when using LabVIEW). So consider if you can't do it using a by-val implementation.
    There are several falvours of by-ref implementation, where you will have the same objects on both wires:
    * private data inside SEQ (single element queue, no replaced by the next one)
    * private data inside DVR (data value reference)
    * object inside DVR
    which implementation you choose is up to you. From your image/code, I'd place the object inside the DVR. You could create the DVR with the obj in the first for loop. In the secend for loop, index your elements and use the IPE to get the obj out of the DVR for your get-set operation and place it back.
    Felix
    www.aescusoft.de
    My latest community nugget on producer/consumer design
    My current blog: A journey through uml

  • Sort values of structure with arrays

    Hi
    For a shopping cart I'm using a structure with arrays to store the items in the cart. I tried to use StructSort but did not work...
    This is how I store the items in the cart:
    <cfscript>
                if (not(isdefined("session.cart"))) {                // Check to make sure that the Shopping cart structure exists.
                    session.cart = structnew();
                // The item structure we are going to use to store the items in the cart
                // is going to have four parts...
                //         1.  The item id
                //         2.  The item name
                //         3.  The price per unit
                //         4.  The quantity
                tempvalue = listtoarray('#attributes.id#,#attributes.name#,#attributes.price#,#attributes.quantity#') ;
                // if the item is not yet in the cart, simply add it to the cart
                if (not(structKeyExists(session.cart, attributes.name))) {
                    StructInsert(session.cart,attributes.name,tempvalue);
                // if the item is already in the cart, update the item quantity
                else {
                    tempvalue[4]=session.cart[attributes.name][4]+attributes.quantity;
                    StructUpdate(session.cart,attributes.name,tempvalue);
    </cfscript>
    Any help will be appreciated.
    Thank you.
    TJ

    To loop over an array one has two options:
    <cfloop index="i" from="1" to="#arrayLen(a)#">
    Or:
    <cfloop index="someVar" array="#a#">
    Personally I use the former because I think the implementation of array-looping with <cfloop> is cocked-up as it's not the index that gets put into "someVar", it's the array element itself.  So by way of pedantic protest, I don't use that syntax.
    But anyway...
    The reason why your struct is unordered is because structs are - innately, and by definition - unordered.  If you want an ordered data structure, you use an array.
    However what you are wanting to do is to sort your array by a subkey value of the structs the array contains.  If you want to do that, you will need to roll your own sorting solution.
    Personally I'd stick with using an array and just use its intrinsic ordering (the order in which items are added to it).  However if you wanted to sort on one of the inner struct keys, you could maintain a separate struct keyed on the value you wish to sort on, containing a reference to the array element in the original array.  Then you could extract a structKeyArray() from that, and use arraySort() to order those index keys in whichever order you like.
    Adam

  • Using LV Class Property Nodes in In-place Element structure causes the code to halt

    I have some code written in LV RT 2010 that uses property nodes from a LVOOP class that I created.  I am using access the property node from inside an in-place element structure.  When the code reaches the property node, LabVIEW stops running.  (as if the abort button was pressed).  I verified this behaviour using highlight execution.  When I remove the in-place structure code runs fine.
    Is this is know bug in LabVIEW?  Is there a CAR to resolve this created for a future release?

    Bob,
    I tried to reproduce the behavior you're seeing by recreating the Trigger and Trigger List classes, but I have not been able to reproduce it.  Please take a look at my version of the project in the attached zip file.  Take a look at Test.vi, and feel free to modify and repost it to show me how to make the problem occur.  I would like to file a CAR to make sure we get the problem fixed, but I will need to be able to reliably reproduce it first.
    On a similar note, you can get much better performance out of the Process Triggers VI by preallocating the list array, instead of using build array in a loop.  Take a look at Process Triggers2.vi in my project.  You can run Benchmark.vi to see the performance difference between the two different approaches.
    Chris M
    Attachments:
    triggerlist test.zip ‏165 KB

  • An "Empty" In Place Element Structure rather than using one Flat Sequence?

    Altenbach's neat Idea here got me thinking of the various ways we do synchronization, and I sat down an In Place structure and thought, why not? It saves a "tiny" bit of space, but personally, I think it looks better - especially for the typical Delay-in-a-Box. Thoughts or caveats?
    Richard

    You could use a single run while loop, it'll be correct usage and look different.
    I recently used that solution to get the 1st element of 5 arrays at once.
    /Y 
    LabVIEW 8.2 - 2014
    "Only dead fish swim downstream" - "My life for Kudos!" - "Dumb people repeat old mistakes - smart ones create new ones."
    G# - Free award winning reference based OOP for LV

  • Find N max elements in unsorted array

    Hi guys,
    I want to find N max elements in unsorted array of integers in most efficient way as possible.
    I could sort and then find the max elements but there should be some way of optimising the performance.
    Any Ideas would be very much appreciated.
    Cheers
    J

    beginerjava wrote:
    I want to find N max elements in unsorted array of integers in most efficient way as possible. One idea is to keep the N largest items so far in a separate data structure. Say it's called NMAX_SOFAR. You need to keep track on the smallest item of NMAX_SOFAR. One way to accomplish this is to keep NMAX_SOFAR in sorted order. The leftmost item is then always the smallest.
    When the algoritm is started NMAX_SOFAR is filled with the N first items of the array. Then the remaining elements are visited one by one. For each item it's checked whether it's larger than the smallest item of NMAX_SOFAR. If it is, it's inserted into NMAX_SOFAR and the smallest item is removed. A new larger item becomes the smallest of NMAX_SOFAR. When all items in the array have been checked, NMAX_SOFAR holds the N largest items.

  • Is there a way of determining what element in an array is being clicked on?

    Hi all.  I would like to setup an event to determine what element in an array is being clicked on/hovered over.  I think I tried this before and found it wasn't working due to limitations of LV 7.0.  If this code already exists, it would be great if I don't have to do a scavenger hunt for the solution.
    I think one possibility I nixed was to use the refnum of the elements to determine which one it is.  IIRC, this is not possible because the refnum of the element is for the edit box only.
    The second possiblity is to get the on click event, and somehow determine which element in the array it is.  This doesn't sound too difficult as it should be a simple calculation, but may get in to some hairryness based on if the indicies are visible or not, and if I am using a new or old array with new or old control (calc would change based on boarder size of the controls).  I might just simplify it by removing indicies and using older control set which has minimal boarder size.
    And just for fun, can I force a tool tip to show up?
    Thanks all,
    A
    Using LV7.0 on WinXP.

    blawson wrote:
    Been bitten by LabVIEW wrote:
    I think one possibility I nixed was to use the refnum of the elements to determine which one it is.  IIRC, this is not possible because the refnum of the element is for the edit box only.
    Using LV7.0 on WinXP.
    This is indeed possible, at least in the newer versions I use.
    Take the array refnum from the click event data terminal and get a reference to the array element.  This refers to the element that was clicked, but you do need to work out how to get the index.  My method is to use property nodes to get the screen position and size of the element and the screen position and size of the array, as well as the array's Visible Index property. For each direction, take the quotient of the relative position of the element (account for padding!) over the size of an element.
    I suspect that taking the mouse coords and comparing to the array's sizes in pixels is similar, although I trust my method for events that don't have mouseclicks (what coords does Array:shortcut menu selection(User) return if you used the keyboard?)
    Here's an old version I happened to have open.  I've posted about this before, I suspect I have a clearer version in my gallery.  I use this method in my example code contest entry to work out which square of the chessboard is clicked.
    Thank you for that one!
    I am currently "locked up behind a down-rev fence" (working an old app in an old version) so I had not heard of that.
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • How do you assign multiple values to a single element in an array?

    I'm probably not wording the question right.
    I have an array, let's call it M[], and for each element in the array (we'll say M[1]), I need assign three integers: row, col and value.
    I need to set it up so I can do something like this:
    A.row = M[i].col;
    A[i].col = M[i].row;
    A[i].value = M[i].value;
    The algorithm isn't what I need help with, it's assigning .col, .row and .value to an index of an array.
    Please help if you can.

    You are right. You did not word your question perfectly, but I still think I get what you want.
    First of all: A single element in an array always has exactly one value. No more, no less.
    But that's not a problem. The element in an array is either of a primitive type (boolean, byte, char, short, int, long, float, double) or it's a reference (to a Object, String, MyClass, ...).
    You can simply write a class that holds your three values and create an array of that type:
    public class SomeData {
      public int row;
      public int col;
      public int value;
    // somewhere else:
    SomeData[] a = new SomeData[10];
    a[0] = new SomeData();
    a[0].row = 10;
    a[0].col = 5;
    a[0].value = 42;Note how you only assign a single value to the element (a[0]) itself. All other assignment actually go to fields of the object refered to by that element in the array.
    Also note that in Java types (such as classes, interfaces, ...) should start with a upper-case letter, while variables (local variables, members, parameters) and method names should start with a lower-case letter.
    Edit: I'm getting old ...

Maybe you are looking for

  • Issue in PO Tax coad

    Dear All,       I have an issue which is like this: I have a set of PO's for different vendors, in all PO's Tax coads are given, but when i see in Print privew there are no Tax printed, I am able to see the tax in Invoice tab when i click the invoice

  • Installing the hyperion planning downloaded from otn

    I have downloaded hyperion from the below link. http://www.oracle.com/technology/software/products/bi/performance-management/hyperion_planning.html I have read in installation guide which says to run setup.exe, but there is no setup.exe file found wh

  • Creating photo gallery - newbie needs help!

    Hey guys! Ok, so I've never really gotten into action script, which is why I'm using http://www.kirupa.com/developer/mx/photogallery.htm as a guide, great tutorial :) But I seem to have some problems. I downloaded the zip file at the bottom of the si

  • Changing fps

    Hi, I would like to change the fps of a movieclip... I've used the kglad's code .... but... the problem is... the fps is not getting applied to the movieclip when it is first time played.... it gets applied only from the second time onwards ..(only i

  • Top 10 Aperture Suggestions for 1.01

    1. Allow us to to export RAW files directly to Photoshop/Adobe Camera RAW if we wish (and treat the result as a separate version). 2. Projects on multiple drives. 3. Curves! also Color Balance Controls. 4. Drag and drop from the import pane to any pr