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错误设置数组元素与序列的主要内容,如果未能解决你的问题,请参考以下文章

Python SVM 设置具有序列错误的数组元素

Python错误为不同循环设置具有序列的数组元素[重复]

ValueError:使用序列python,numpy设置数组元素[重复]

在训练 SVM 对图像进行分类时设置具有序列错误的数组元素

Keras 和错误:使用序列设置数组元素

Keras 神经网络错误:使用序列设置数组元素