Numpy Error: Operands could not be broadcast together with shapes (2,) (0,)
Numpy Error: Operands could not be broadcast together with shapes (2,) (0,)
我正在尝试创建一个二维数组,其中的值取自数组的先前值,并添加到从函数计算的值中。但是我收到错误:
ValueError: operands could not be broadcast together with shapes (2,) (0,)
现在虽然我知道错误的含义,但我似乎无法找到问题的确切位置或解决方法。
该程序的用途是创建一个自定义欧拉求解器,它使用函数
添加数组的先前值
代码:
import numpy as np
from scipy.integrate import odeint
def func():
d1 = #equation
d2 = #equation
return [[d1], [d2]]
l = 1
m = 1
g = 1
mu = 1
max = 1
arr_in = np.array(1, 1)
arr_2 = np.linspace(1, 4, maxx)
dt = 1
arr_out = np.zeros((max, 2))
arr_out[0] = arr_in[0]
for i in range(len(arr_2)):
arr_out[i+1] = arr_out[i] + func(arr_out[i-1], arr_2[i-1], l, m, g, mu) * dt
回溯:
Traceback (most recent call last):
File "task3.py", line 31, in <module>
res_arr[i] = solver(res_arr, i)
ValueError: could not broadcast input array from shape (2,2) into shape (2,)
您要么缺少一对括号:
for i in range(len(time_arr)):
# v v
res_arr[i+1] = (res_arr[i] + pend_func(res_arr[i-1], time_arr[i-1], l, m, g, mu)) * dt
# ^ ^
或者需要将pend_func
的return类型转换为np.array
:
for i in range(len(time_arr)):
# vvvvvvvvv v
res_arr[i+1] = res_arr[i] + np.array(pend_func(res_arr[i-1], time_arr[i-1], l, m, g, mu)) * dt
# ^^^^^^^^^ ^
两者都能解决问题,但会产生不同的结果,所以我不确定哪一个适合您的目的。
问题是 pend_func 函数返回的数组与其余数组的形状不同。这是通过更改
修复的
return [[d1], [d2]]
至
return [d1, d2]
我正在尝试创建一个二维数组,其中的值取自数组的先前值,并添加到从函数计算的值中。但是我收到错误:
ValueError: operands could not be broadcast together with shapes (2,) (0,)
现在虽然我知道错误的含义,但我似乎无法找到问题的确切位置或解决方法。
该程序的用途是创建一个自定义欧拉求解器,它使用函数
添加数组的先前值代码:
import numpy as np
from scipy.integrate import odeint
def func():
d1 = #equation
d2 = #equation
return [[d1], [d2]]
l = 1
m = 1
g = 1
mu = 1
max = 1
arr_in = np.array(1, 1)
arr_2 = np.linspace(1, 4, maxx)
dt = 1
arr_out = np.zeros((max, 2))
arr_out[0] = arr_in[0]
for i in range(len(arr_2)):
arr_out[i+1] = arr_out[i] + func(arr_out[i-1], arr_2[i-1], l, m, g, mu) * dt
回溯:
Traceback (most recent call last):
File "task3.py", line 31, in <module>
res_arr[i] = solver(res_arr, i)
ValueError: could not broadcast input array from shape (2,2) into shape (2,)
您要么缺少一对括号:
for i in range(len(time_arr)):
# v v
res_arr[i+1] = (res_arr[i] + pend_func(res_arr[i-1], time_arr[i-1], l, m, g, mu)) * dt
# ^ ^
或者需要将pend_func
的return类型转换为np.array
:
for i in range(len(time_arr)):
# vvvvvvvvv v
res_arr[i+1] = res_arr[i] + np.array(pend_func(res_arr[i-1], time_arr[i-1], l, m, g, mu)) * dt
# ^^^^^^^^^ ^
两者都能解决问题,但会产生不同的结果,所以我不确定哪一个适合您的目的。
问题是 pend_func 函数返回的数组与其余数组的形状不同。这是通过更改
修复的return [[d1], [d2]]
至
return [d1, d2]