Hallo,
in meinem Programm wird in einer if-Abfrage der Wert einer Variablen abgefragt. Auf Rechner1 trifft die Bedingung zu, auf Rechner2 nicht. Auf der Suche nach dem Grund habe ich herausgefunden, dass auf Rechner1 die Variable den type 'numpy.ndarray' hat, auf Rechner2 allerdings lediglich 'array'. Eine Überprüfung der Versionsnummern ergab, dass auf Rechner1 python 2.6.4 und numpy 1.3.0 installiert ist, auf Rechner2 python 2.6.2 und numpy 1.2.1. Auf Grund der Rechenzeit muss ich auf mehreren Rechnern gleichzeitig rechnen und das Problem mit den niedrigeren Versionsnummern tritt bei mehreren Rechnern auf. Auf allen Rechnern aktuellere Versionen zu installieren würde einige Zeit dauern und ich würde das wenn möglich gerne vermeiden. Meine Frage ist nun ob jemand weiß ob/wie man den 'array' in ein 'numpy.ndarray' konvertieren kann, oder ob dieser type nur neueren python/numpy Versionen bekannt ist. Ich habe schon versucht über google eine Antwort darauf zu finden, was für Veränderungen in den jeweiligen Versionen eingeführt wurden, habe aber bisher keine vollständige Dokumentation gefunden. Vielleicht bin ich aber auch auf der völlig falschen Fährte? Für Tipps wäre ich sehr dankbar!
Sophy
Verschiedener type je nach numpy Version
@sophy: Kannst Du mehr über die ``if``-Abfrage verraten? Vergleichst Du da vielleicht Fliesskommazahlen ohne eine Abweichung zu berücksichtigen?
Es wird lediglich gecheckt, ob das array Element ungleich Null ist:
[python]
for j in range(whatever):
if x[j]!=0:
y[j]=np.masked
[/python]
Wenn ich mir explizit x[j] ausgeben lasse, dann erscheint auf Rechner1 '0.0' auf Rechner2 'array(0.0, 'f')'. Deswegen war ich ursprünglich stutzig geworden.
[python]
for j in range(whatever):
if x[j]!=0:
y[j]=np.masked
[/python]
Wenn ich mir explizit x[j] ausgeben lasse, dann erscheint auf Rechner1 '0.0' auf Rechner2 'array(0.0, 'f')'. Deswegen war ich ursprünglich stutzig geworden.
Kann es sein, dass dein "y"-array doppelt verschachtelt ist?
Ansonsten zeig mal den Code, wo die Arrays erstellt werden.
Grüße
Gerrit
Code: Alles auswählen
In [26]: np.array([[1]])
Out[26]: array([[1]])
In [27]: x = np.array([1])
In [28]: y = np.array([[1]])
In [29]: x[0]
Out[29]: 1
In [30]: y[0]
Out[30]: array([1])
Grüße
Gerrit
Das array wird aus einer Datei eingelesen. Und ja, ich schätze mit den älteren Versionen ist es verschachtelt. Habe gerade probiert es mir so
auszugeben, und ich erhalte endlich den tatsächlichen Wert '0.0'. Allerdings läuft das Programm so dann nur unter den älteren Versionen, unter den neueren wieder kommt eine nette Fehlermeldung: IndexError: invalid index to scalar variable. Vielleicht kann man im Programm die Version abfragen und entsprechend 2 cases schreiben? Dafür müsste ich aber endlich herausfnden, ob es an der anderen python oder der anderen numpy Version liegt...
Code: Alles auswählen
print x[j][0]
Zuletzt geändert von sophy am Mittwoch 8. September 2010, 17:02, insgesamt 1-mal geändert.
so:
Code: Alles auswählen
import numpy as np
import scipy as sp
from Scientific.IO.NetCDF import *
def read_var(fid,var_name):
invar=fid.variables[var_name]
var=invar.getValue()
return var
fid=NetCDFFile(file_in,'r')
x=read_var(fid,'x')
Das Problem liegt dann wohl eher an "Scientific.IO.NetCDF". Hat deine scipy-Version das Module "scipy.io.netcdf". Vielleicht geht es damit besser. Ansonsten hilft noch, wenn deine Arrays 1-dimensional sind:
Code: Alles auswählen
In [46]: y = np.array([[1],[2]])
In [47]: x = np.array([1,2])
In [48]: x.flatten()
Out[48]: array([1, 2])
In [49]: y.flatten()
Out[49]: array([1, 2])