python错误设置数组元素与序列
Posted
技术标签:
【中文标题】python错误设置数组元素与序列【英文标题】:python error setting array element with sequence 【发布时间】:2020-03-01 22:57:08 【问题描述】:我收到消息“设置带有序列的数组元素”。在 xstar、ystar、zstar 上。我知道这意味着什么,但无法弄清楚问题出在哪里。我已经计算了星系中恒星的 x、y 和 z 位置,并试图将该值插入到所有恒星的 x 位置的数组中。您可以看到我将 xstar 设置为等于 'glen' 并且它形成了一个浮点值,但是当我尝试将它插入到数组中时,它给了我这个错误。
文件“C:/Users/Glenn/.spyder-py3/Cluster.py”,第 225 行,在设置中 xstar[k,i]=glen
ValueError: 使用序列设置数组元素。
这让我觉得问题出在我在 xstar[k,i] 上的语法上,但我看不出有什么问题。奇怪的是 k=0 的代码似乎可以工作,但是当 k=1 时,它就进入了底池。 这是试图找出问题的打印输出的最后几行:
0 9 14 158 34.0 xstar 109.73718069851107
0 9 15 159 34.0 xstar 100.04751534246702 1 0 0 0 5.0
下面是代码。任何帮助,将不胜感激。我是这门语言的新手,在这里被困了几个星期。很抱歉在较长的行中绕行
import math
import numpy
from PIL import Image,ImageDraw
import array
import random
import sys
...
xst = [[0.0 for i in range(1000)] for j in range(5)]
yst = [[0.0 for i in range(1000)] for j in range(5)]
zst = [[0.0 for i in range(1000)] for j in range(5)]
xstar = numpy.asarray(xst,numpy.float64,'C')
ystar = numpy.asarray(yst,numpy.float64,'C')
zstar = numpy.asarray(zst,numpy.float64,'C')
def setup():
global dr
global galnum
global rings
global star_per_ring
global gc1
global gc2
global gc3
global an
global xstar
global ystar
global zstar
for k in range(galnum-1):
i=-1
for ir in range(rings):
R=10+(ir-1)*dr
if k==0:
V=(M2[k]/R)**2
th=(0.5*V/R)*(180/3.1415927)
gc1 = 150
gc2 = 100
gc3 = 0
else:
V=(M2[k]/R)**0.5
th=(0.5*V/R)*(180/3.1415927)
gc1=150+x[k]-x[1]
gc2=100+y[k]-y[1]
gc3=z[k]-z[1]
for it in range(star_per_ring):
t=(it-1)*360
t= t/star_per_ring
fg=(it-1)*360/star_per_ring
t1=3.1415927*(t-th)/180
i=int(i+1)
print(k, ir, it, i, an[k,0])
glen = R*numpy.cos(t/57.2958)*numpy.cos(an[0,k])-\
R*numpy.sin(t/57.2958)*numpy.sin(an[0,k])*numpy.cos(an[0,k])\
+gc1;
# print('glenn',glen, )
xstar[k,i]=glen
print('xstar',xstar[k,i])
ystar[k,i] = R*numpy.cos(t/57.2958)*numpy.sin(an[1,k])+\
R*numpy.cos(an[1,k])*numpy.sin(t/57.2958)*numpy.cos(an[0,k])\
+gc2;
zstar[k,i] = R*numpy.sin(t/57.2958)*numpy.sin(an[0,k])+gc3;
vstarx = -V*numpy.sin(t1)*numpy.cos(an[1,k])-\
V*numpy.cos(t1)*numpy.sin(an[1,k])*numpy.cos(an[1,k]);
vstary = -V*numpy.sin(t1)*numpy.sin(an[1,k])\
+V*numpy.cos(t1)*numpy.cos(an[1,k])*numpy.cos(an[1,k]);
vstarz = V*numpy.cos(t1)*numpy.sin(an[0,k])
if (k>1):
vstarx[k,i]=VX2[k]+vstarx[k,i]
vstary[k,i]=VY2[k]+vstary[k,i]
vstarz[k,i]=VZ2[k]+vstarz[k,i]
【问题讨论】:
【参考方案1】:star 是二维数组吗?如果是这样,那么在多维数组中调用对象的方法是 xstar[k][i]。
【讨论】:
是的 xstar、ystar 和 zstar 是二维数组。这是试图模拟星系碰撞和 xstar、ystar 和 zstar 或 5 个不同星系中恒星的 x、y 和 z 位置。我想我尝试从 ystar 中删除索引以查看发生了什么,但它不起作用。如果我无法修复它,我将为每个星系使用一个 1d 数组以上是关于python错误设置数组元素与序列的主要内容,如果未能解决你的问题,请参考以下文章