【发布时间】:2021-03-20 19:26:47
【问题描述】:
我有两个通用函数 Estability3 和 Lstability3,我想在其中评估数组的二维切片和向量的一维范围。我已经在 jupyter notebook 中探索了函数之外的错误,其中包含函数的一些参数。
这些函数计算能量和角动量。计算能量和角动量所需的位置和速度数据存储在称为 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]])
我通过选择该矩阵的第一行来选择第零个时间步的第一颗星。如果我像往常一样循环数千个时间步长,我会使用数千个这样的矩阵并将它们附加到列表中,然后转换为具有数千列的 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
为什么我不能使用 : 运算符来获取这个二维数组的第一行?如何在这个也适用于矩阵的更通用的代码中做到这一点?
谢谢, 史蒂文
【问题讨论】:
标签: python-3.x matrix vector colon numpy-slicing