python ошибка установки элемента массива с последовательностью - PullRequest
0 голосов
/ 02 марта 2020

Я получаю сообщение «установка элемента массива с помощью последовательности». на xstar, ystar, zstar. Я знаю, что это значит, но не могу понять, где проблема. Я рассчитал координаты x, y и z звезды в галактике и пытаюсь вставить это значение в массив для местоположений x всех звезд. вы можете видеть, что я сделал xstar равным 'glen', и он формирует одно значение с плавающей запятой, но когда я пытаюсь вставить его в массив, я получаю эту ошибку.

File "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 Ответ

0 голосов
/ 02 марта 2020

является ли звезда двумерным массивом? если это так, то способ вызова объекта в многомерном массиве - это xstar [k] [i].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...