'numpy.ndarray' 对象不可调用文件未正确选择
'numpy.ndarray' object is not callable Files are not properly selected
我有以下一段代码。
fw = open(os.path.join(result_folder, 'motor_commands.txt'),'w')
np.set_printoptions(precision=3)
for positioner in positioner_grid.positioners[1:]:
simplejson.dump(('Positioner ' + str(positioner.ident)), fw)
fw.write('\n')
array = np.array(positioner.motor1.position_array) * 180/math.pi
array = np.round(array, decimals=4)
simplejson.dump(array.tolist(), fw)
fw.write('\n')
array = np.array(positioner.motor2.position_array) * 180/math.pi
array = np.round(array, decimals=4)
simplejson.dump(array.tolist(), fw)
fw.write('\n \n')
fw.close()
它的输出是一个motor_commands.txt
,其布局(例如,对于2个定位器)是这样的(以下符号条目实际上是数字):
"Positioner 1"
[P11, P12, P13]
[Q11, Q12, Q13]
"Positioner 2"
[P21, P22, P23]
[Q21, Q22, Q23]
给定一个预定义变量 dt
,我需要生成另一个名为 trajectories.yaml
的文件,其格式应如下所示:
1:
alpha: [[P11,0*dt],[P12,1*dt],[P13,2*dt]]
beta: [[Q11,0*dt],[Q12,1*dt],[Q13,2*dt]]
2:
alpha: [[P21,0*dt],[P22,1*dt],[P23,2*dt]]
beta: [[Q21,0*dt],[Q22,1*dt],[Q23,2*dt]]
所以,这是我到目前为止为生成上面的布局所做的尝试。
tw = open(os.path.join(result_folder, 'trajectories.yaml'), 'w')
for positioner in positioner_grid.positioners[1:]:
simplejson.dump((str(positioner.ident) + ':'), tw)
tw.write('\n')
simplejson.dump(('alpha: '), tw)
position1 = []
for i in range(1, len(positioner.motor1.position_array)):
temp = [positioner.motor1.position_array[i] * 180 / math.pi, (i-1) * dt]
position1.append(temp)
simplejson.dump(array[position1].tolist(), tw)
tw.write('\n')
simplejson.dump(('beta: '), tw)
position2 = []
for i in range(1, len(positioner.motor2.position_array)):
temp = [positioner.motor2.position_array[i] * 180 / math.pi, (i-1) * dt]
position2.append(temp)
simplejson.dump(array[position2].tolist(), tw)
tw.write('\n')
tw.close()
但是抛出如下错误:
'numpy.ndarray' object is not callable Files are not properly selected.
我的 trajectories.yaml
文件没有正确生成:
"1:"
"alpha: "
请问我做错了什么?
很难确定,但我相信你的问题会按以下方式解决。
tw = open(os.path.join(result_folder, 'trajectories.yaml'), 'w')
for positioner in positioner_grid.positioners[1:]:
tw.write(str(positioner.ident) + ':')
tw.write('\n')
tw.write(' alpha: ')
position1 = []
for i in range(0, len(positioner.motor1.position_array)):
temp = [positioner.motor1.position_array[i] * 180 / math.pi, i * dt]
position1.append(temp)
simplejson.dump(position1, tw)
tw.write('\n')
tw.write(' beta: ')
position2 = []
for i in range(0, len(positioner.motor2.position_array)):
temp = [positioner.motor2.position_array[i] * 180 / math.pi, i * dt]
position2.append(temp)
simplejson.dump(position2, tw)
tw.write('\n')
tw.close()
如果我们使用 math.degrees()
、enumerate()
和列表理解,这段代码可以大大缩短。此外,open()
的首选习惯用法是 with open(...):
,它保证文件将被关闭。
考虑到这一点,上面可以重写为:
import math
with open(os.path.join(result_folder, 'trajectories.yaml'), 'w') as tw:
for p in positioner_grid.positioners[1:]:
tw.write(str(p.ident) + ':\n alpha: ')
position1 = [[math.degrees(pos), i * dt] for i, pos in enumerate(p.motor1.position_array)]
simplejson.dump(position1, tw)
tw.write('\n beta: ')
position2 = [[math.degrees(pos), i * dt] for i, pos in enumerate(p.motor2.position_array)]
simplejson.dump(position2, tw)
tw.write('\n')
我有以下一段代码。
fw = open(os.path.join(result_folder, 'motor_commands.txt'),'w')
np.set_printoptions(precision=3)
for positioner in positioner_grid.positioners[1:]:
simplejson.dump(('Positioner ' + str(positioner.ident)), fw)
fw.write('\n')
array = np.array(positioner.motor1.position_array) * 180/math.pi
array = np.round(array, decimals=4)
simplejson.dump(array.tolist(), fw)
fw.write('\n')
array = np.array(positioner.motor2.position_array) * 180/math.pi
array = np.round(array, decimals=4)
simplejson.dump(array.tolist(), fw)
fw.write('\n \n')
fw.close()
它的输出是一个motor_commands.txt
,其布局(例如,对于2个定位器)是这样的(以下符号条目实际上是数字):
"Positioner 1"
[P11, P12, P13]
[Q11, Q12, Q13]
"Positioner 2"
[P21, P22, P23]
[Q21, Q22, Q23]
给定一个预定义变量 dt
,我需要生成另一个名为 trajectories.yaml
的文件,其格式应如下所示:
1:
alpha: [[P11,0*dt],[P12,1*dt],[P13,2*dt]]
beta: [[Q11,0*dt],[Q12,1*dt],[Q13,2*dt]]
2:
alpha: [[P21,0*dt],[P22,1*dt],[P23,2*dt]]
beta: [[Q21,0*dt],[Q22,1*dt],[Q23,2*dt]]
所以,这是我到目前为止为生成上面的布局所做的尝试。
tw = open(os.path.join(result_folder, 'trajectories.yaml'), 'w')
for positioner in positioner_grid.positioners[1:]:
simplejson.dump((str(positioner.ident) + ':'), tw)
tw.write('\n')
simplejson.dump(('alpha: '), tw)
position1 = []
for i in range(1, len(positioner.motor1.position_array)):
temp = [positioner.motor1.position_array[i] * 180 / math.pi, (i-1) * dt]
position1.append(temp)
simplejson.dump(array[position1].tolist(), tw)
tw.write('\n')
simplejson.dump(('beta: '), tw)
position2 = []
for i in range(1, len(positioner.motor2.position_array)):
temp = [positioner.motor2.position_array[i] * 180 / math.pi, (i-1) * dt]
position2.append(temp)
simplejson.dump(array[position2].tolist(), tw)
tw.write('\n')
tw.close()
但是抛出如下错误:
'numpy.ndarray' object is not callable Files are not properly selected.
我的 trajectories.yaml
文件没有正确生成:
"1:"
"alpha: "
请问我做错了什么?
很难确定,但我相信你的问题会按以下方式解决。
tw = open(os.path.join(result_folder, 'trajectories.yaml'), 'w')
for positioner in positioner_grid.positioners[1:]:
tw.write(str(positioner.ident) + ':')
tw.write('\n')
tw.write(' alpha: ')
position1 = []
for i in range(0, len(positioner.motor1.position_array)):
temp = [positioner.motor1.position_array[i] * 180 / math.pi, i * dt]
position1.append(temp)
simplejson.dump(position1, tw)
tw.write('\n')
tw.write(' beta: ')
position2 = []
for i in range(0, len(positioner.motor2.position_array)):
temp = [positioner.motor2.position_array[i] * 180 / math.pi, i * dt]
position2.append(temp)
simplejson.dump(position2, tw)
tw.write('\n')
tw.close()
如果我们使用 math.degrees()
、enumerate()
和列表理解,这段代码可以大大缩短。此外,open()
的首选习惯用法是 with open(...):
,它保证文件将被关闭。
考虑到这一点,上面可以重写为:
import math
with open(os.path.join(result_folder, 'trajectories.yaml'), 'w') as tw:
for p in positioner_grid.positioners[1:]:
tw.write(str(p.ident) + ':\n alpha: ')
position1 = [[math.degrees(pos), i * dt] for i, pos in enumerate(p.motor1.position_array)]
simplejson.dump(position1, tw)
tw.write('\n beta: ')
position2 = [[math.degrees(pos), i * dt] for i, pos in enumerate(p.motor2.position_array)]
simplejson.dump(position2, tw)
tw.write('\n')