mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
update the function of set array section value
This commit is contained in:
parent
9d98214394
commit
e609a29d0a
@ -1,8 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification">
|
||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\array">
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math\interpolate"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
|
||||
@ -16,17 +15,18 @@
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
||||
</Path>
|
||||
<File>
|
||||
<OpenedFiles>
|
||||
<OpenedFile File="D:\Working\MIScript\cuace\script\plot_pm25_3d_particles_relief.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\array\set_item.py"/>
|
||||
</OpenedFiles>
|
||||
<RecentFiles>
|
||||
<RecentFile File="D:\Working\MIScript\cuace\script\plot_pm25_3d_particles_relief.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\array\set_item.py"/>
|
||||
</RecentFiles>
|
||||
</File>
|
||||
<Font>
|
||||
@ -34,5 +34,5 @@
|
||||
</Font>
|
||||
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
||||
<Figure DoubleBuffering="true"/>
|
||||
<Startup MainFormLocation="-3,4" MainFormSize="1308,744"/>
|
||||
<Startup MainFormLocation="-7,-7" MainFormSize="1293,693"/>
|
||||
</MeteoInfo>
|
||||
|
||||
Binary file not shown.
@ -239,12 +239,10 @@ class NDArray(object):
|
||||
return None
|
||||
|
||||
if not isinstance(indices, tuple):
|
||||
inds = []
|
||||
inds.append(indices)
|
||||
indices = inds
|
||||
indices = [indices]
|
||||
|
||||
if len(indices) < self.ndim:
|
||||
for i in range(self.ndim - len(indices)):
|
||||
for _ in range(self.ndim - len(indices)):
|
||||
indices.append(slice(None))
|
||||
|
||||
if self.ndim == 0:
|
||||
|
||||
@ -8,5 +8,5 @@
|
||||
<ScriptLanguage Language="Jython"/>
|
||||
<LookFeel LafDecorated="true" Name="FlatLightLaf"/>
|
||||
<Figure DoubleBuffering="true"/>
|
||||
<Startup MainFormLocation="-4,6" MainFormSize="1293,693" ShowMeteoDataDlg="true"/>
|
||||
<Startup MainFormLocation="-7,-7" MainFormSize="1293,693" ShowMeteoDataDlg="true"/>
|
||||
</MeteoInfo>
|
||||
|
||||
@ -0,0 +1,310 @@
|
||||
package org.meteoinfo.ndarray;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
public class MixIterator implements IndexIterator {
|
||||
|
||||
private int count = 0;
|
||||
private int currElement = 0;
|
||||
private int size = 0;
|
||||
private int rank = 1;
|
||||
private List<Object> ranges;
|
||||
private Array array;
|
||||
private Index rangeIndex;
|
||||
private IndexIterator rangeIndexIter;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param array The array
|
||||
* @param ranges The range list - mixed with int list and Range
|
||||
*/
|
||||
public MixIterator(Array array, List<Object> ranges) {
|
||||
this.array = array;
|
||||
this.ranges = ranges;
|
||||
this.rank = ranges.size();
|
||||
int i = 0;
|
||||
int[] shape = new int[this.rank];
|
||||
for (Object range : this.ranges) {
|
||||
if (range instanceof Range) {
|
||||
shape[i] = ((Range) range).length();
|
||||
} else {
|
||||
shape[i] = ((List) range).size();
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
Array tempArray = Array.factory(DataType.INT, shape);
|
||||
this.size = (int) tempArray.getSize();
|
||||
this.rangeIndex = tempArray.getIndex();
|
||||
this.rangeIndexIter = tempArray.getIndexIterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return this.rangeIndexIter.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDoubleNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDoubleNext(double val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDoubleCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDoubleCurrent(double val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFloatNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFloatNext(float val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFloatCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFloatCurrent(float val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLongNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLongNext(long val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLongCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLongCurrent(long val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIntNext(int val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIntCurrent(int val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public short getShortNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShortNext(short val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public short getShortCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShortCurrent(short val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getByteNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setByteNext(byte val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getByteCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setByteCurrent(byte val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public char getCharNext() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCharNext(char val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public char getCharCurrent() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCharCurrent(char val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringNext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStringNext(String val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringCurrent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStringCurrent(String val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getBooleanNext() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBooleanNext(boolean val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getBooleanCurrent() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBooleanCurrent(boolean val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Complex getComplexNext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setComplexNext(Complex val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Complex getComplexCurrent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setComplexCurrent(Complex val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDateCurrent(LocalDateTime val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDateTime getDateNext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDateNext(LocalDateTime val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDateTime getDateCurrent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getObjectNext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setObjectNext(Object val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getObjectCurrent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setObjectCurrent(Object val) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object next() {
|
||||
return this.rangeIndexIter.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getCurrentCounter() {
|
||||
int[] currentCounter = new int[this.rank];
|
||||
int[] rangeCounter = this.rangeIndexIter.getCurrentCounter();
|
||||
int i = 0;
|
||||
int c;
|
||||
for (Object range : this.ranges) {
|
||||
if (range instanceof Range) {
|
||||
c = ((Range)range).elementNC(rangeCounter[i]);
|
||||
} else {
|
||||
c = ((List<Integer>)range).get(rangeCounter[i]);
|
||||
}
|
||||
currentCounter[i] = c;
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return currentCounter;
|
||||
}
|
||||
}
|
||||
@ -438,7 +438,7 @@ if(false) {// Original version
|
||||
* @param i index of the element
|
||||
* @return the i-th element of a range, no check
|
||||
*/
|
||||
private int elementNC(int i) {
|
||||
public int elementNC(int i) {
|
||||
return first + i * stride;
|
||||
}
|
||||
|
||||
|
||||
@ -4739,6 +4739,28 @@ public class ArrayMath {
|
||||
* @return Result array
|
||||
*/
|
||||
public static Array setSection_Mix(Array a, List<Object> ranges, Number v) {
|
||||
MixIterator mixIterator = new MixIterator(a, ranges);
|
||||
Index index = a.getIndex();
|
||||
int[] current;
|
||||
while (mixIterator.hasNext()) {
|
||||
mixIterator.next();
|
||||
current = mixIterator.getCurrentCounter();
|
||||
index.set(current);
|
||||
a.setObject(index, v);
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set section
|
||||
*
|
||||
* @param a Array a
|
||||
* @param ranges Ranges
|
||||
* @param v Number value
|
||||
* @return Result array
|
||||
*/
|
||||
public static Array setSection_Mix_Bak(Array a, List<Object> ranges, Number v) {
|
||||
Array r = Array.factory(a.getDataType(), a.getShape());
|
||||
int n = a.getRank();
|
||||
IndexIterator iter = r.getIndexIterator();
|
||||
@ -4783,6 +4805,30 @@ public class ArrayMath {
|
||||
* @return Result array
|
||||
*/
|
||||
public static Array setSection_Mix(Array a, List<Object> ranges, Array v) {
|
||||
MixIterator mixIterator = new MixIterator(a, ranges);
|
||||
Index index = a.getIndex();
|
||||
Index vIndex = v.getIndex();
|
||||
int[] current;
|
||||
while (mixIterator.hasNext()) {
|
||||
mixIterator.next();
|
||||
current = mixIterator.getCurrentCounter();
|
||||
index.set(current);
|
||||
a.setObject(index, v.getObject(vIndex));
|
||||
vIndex.incr();
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set section
|
||||
*
|
||||
* @param a Array a
|
||||
* @param ranges Ranges
|
||||
* @param v Array value
|
||||
* @return Result array
|
||||
*/
|
||||
public static Array setSection_Mix_Bak(Array a, List<Object> ranges, Array v) {
|
||||
Array r = Array.factory(a.getDataType(), a.getShape());
|
||||
int n = a.getRank();
|
||||
IndexIterator iter = r.getIndexIterator();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user