SciPy - ValueError: cannot reshape array of size ... into shape ...

0

Witam,

pobrałem sobie z githuba open-source'owy kod do obliczeń wytrzymałościowych płyt metodą elementów skończonych:

https://github.com/nayem-cosmic/FEM-Plate-MZC-Python

Po zainstalowaniu funkcją pip install wymaganych modułów Pythona (Matplotlib, SciPy, Pyevtk, ReportLab) spróbowałem odpalić główny skrypt plate_mzc.py. Korzysta on z plików get_data.py i data.txt. W get_data ustawiłem:

python def get_data(data):
python f = open("data.txt",'r')

Natomiast w samym plate_mzc.py zmieniłem:

python filename = input("Input filename: get_data")
python dat = get_data("get_data.py")

To jedyne zmiany jakich dokonałem (wprowadziłem je po to, by wskazać programowi potrzebne pliki). Niestety po uruchomieniu skryptu plate_mzc.py na końcowym etapie obliczeń pojawił się error:

ValueError: cannot reshape array of size 16 into shape(4,)

Czy ktoś mógłby zerknąć na to i spróbować znaleźć przyczynę błędu ?

Z góry dziękuję za pomoc

0
EngProg napisał(a):

python dat = get_data("get_data.py")

Z tego co widzę, to get_data.py zawiera kod Pythona, a nie dane, więc pewnie parsowanie jego zawartości wyrzuca wyjątkiem.

0

To powinno działać tak, że dane wejściowe do obliczeń wprowadza się do pliku data.txt, ten plik jest pobierany przez skrypt get_data.py, który z kolei przekazuje dane do skryptu liczącego plate_mzc.py. Całkiem możliwe, że błąd wynika z tego, że źle wpisałem te nazwy plików. Ale niestety po zmianie na:

filename = input("Input filename: get_data")
python dat = get_data("data.txt")

lub:

filename = input("Input filename: data")
python dat = get_data("data.txt")

jest ten sam błąd co wcześniej.

0

Debugowałeś?

1

Nie masz możliwości zastosowania tego w matlabie? Zalecam :)

Uruchomiłem tej program u siebie - również zachodzi ten błąd.

Ciężko mi to przeanalizować, bo nie znam tematyki, ale błąd generuje scipy, a samo

cannot reshape array of size 16 into shape (4,)

jest błędem słusznym, bo w chwili występowania błędu

Nasz shape i.shape
(4,)

Sam obiekt x
[[ 3.75000000e+00 3.75000000e+00 3.75000000e+00 3.75000000e+00]
[-4.87500000e+00 -4.87500000e+00 -4.87500000e+00 -4.87500000e+00]
[ 1.12500000e+00 1.12500000e+00 1.12500000e+00 1.12500000e+00]
[-2.22044605e-16 -2.22044605e-16 -2.22044605e-16 -2.22044605e-16]]

Zatem, nie jest to możliwe.

Idąc dalej, błąd powoduje:

        Str1 = mstres @ Strx
        Strnod[lnods,0] = Strnod[lnods,0] + Str1

Gdzie:
Str1 to shape (4,1)
Strnod[lnods,0] jest puste, ale lnods to tablica [x,x,x,x], czyli:

Strnod[[x,x,x,x],0] = Strnod[[x,x,x,x],0] + shape(4,1),

a to wygląda poprawnie, bo:
print(Str1.shape) -> (4, 1)
print(Strnod[lnods,0].shape) -> (4, 1),
a błąd jest właśnie z niezgodnością shape.

I szczerze mówiąc tu sie zgubiłem. Operacja przypisania w ten sposób nie działa, ale nie wiem z jakiego powodu.

Zrób downgrade:
pip install scipy==1.2.2

i pewnie ruszy.

0

Na razie nie próbowałem debugowania, bo słabo znam Pythona.

Downgrade niestety nie wychodzi - przy próbie instalacji tej wersji pojawia się error.

0

Jaki error?

zobacz podobną wersje
https://pypi.org/project/scipy/#history

1.2.1
1.2.3

0

Dziwne, tych wersji też nie pozwala mi zainstalować. Error jest strasznie długi. Zaczyna się od Command errored out with exit status 1. Dalej jest cała lista plików i kilka razy not available.

1 użytkowników online, w tym zalogowanych: 0, gości: 1