我有两个通用函数Estability3和Lstability3,其中我想评估数组的二维切片和向量的一维范围。我已经在jupyter笔记本中探讨了函数外的错误,其中包含了函数的一些参数。
这些函数计算能量和角动量。计算能量和角动量所需的位置和速度数据存储在一个名为xvec的二维矩阵中,其中位置和速度沿着一行,三个条目表示三星。xvec0是模拟的初始数据(时间步长0(。
xvec0
array([[-5.00000000e+00, 0.00000000e+00, 0.00000000e+00, -0.00000000e+00, -2.23606798e+00, 0.00000000e+00],
[ 5.00000000e+00, 0.00000000e+00, 0.00000000e+00, -0.00000000e+00, 2.23606798e+00, 0.00000000e+00],
[ 9.95024876e+02, 0.00000000e+00, 0.00000000e+00, -0.00000000e+00, 4.46099737e-01, 0.00000000e+00]])
我通过选择这个矩阵的第一行来选择第0个时间步长的第一颗星。如果我像往常一样在数千个时间步长上循环,我会使用数千个这样的矩阵,并将它们附加到列表中,然后转换为具有数千列的numpy数组。(因此xvec1_0将有数千列,而不是一列(。
xvec1_0=xvec0[0]
由于xvec1_0只有一列,因此我试图强制numpy将其识别为矩阵。它不起作用。
np.reshape(xvec1_0,(1,6))
array([[-5. , 0. , 0. , -0. , -2.23606798,
0. ]])
我看到它有两个外括号,这意味着它是一个矩阵。但是,当我尝试在一列上使用冒号索引时,就像我通常在1000列上使用的那样,我会得到一个错误。
xvec1_0[:,0:3]
IndexError Traceback (most recent call last)
<ipython-input-115-79d26475ac10> in <module>
----> 1 xvec1_0[:,0:3]
IndexError: too many indices for array
为什么我不能使用:运算符来获取这个二维数组的第一行?在这个同样适用于矩阵的更通用的代码中,我该如何做到这一点?
谢谢,Steven
我想我误读了整形的函数定义。我以为它改变了它的位置。没有,我需要分配一个输出,比如这个
xvec0_1 = np.reshape(xvec1_0,(1,6))
xvec1_0[:,0:3]
array([[-5., 0., 0.]])
xvec1_0
array([[-5. , 0. , 0. , -0. , -2.23606798,
0. ]])
xvec1_0.shape
(1, 6)
多亏了一位朋友的帮助,我发现以下方法很好用。
import numpy as np
x = np.zeros((1,6))
print(x.shape)
print(x[:,0:3])
x[:,0:3]
(1, 6)
[[0. 0. 0.]]
array([[0., 0., 0.]])
x = np.zeros((6,))
print(x.shape)
x = np.reshape(x, (1,6))
print(x[:,0:3])
x[:,0:3]
(6,)
[[0. 0. 0.]]
array([[0., 0., 0.]])
也许我应该考虑一下其中的一些测试,但当我看到np.reshape的输出时,我认为我已经找到了最基本的测试。我真的很感谢朋友的帮助,希望我的问题不要太浪费任何人的时间。