如何解决当 numpy 可能是向量或矩阵时,使用冒号运算符对 numpy 中的列进行切片
我有两个通用函数 Estability3 和 Lstability3,我想在其中评估二维数组切片和一维向量范围。我已经探索了 jupyter notebook 中函数之外的错误,以及函数的一些参数。
这些函数计算能量和角动量。计算能量和角动量所需的位置和速度数据存储在称为 xvec 的二维矩阵中,其中位置和速度沿一行排列,三个条目代表三颗星。 xvec0 是模拟的初始数据(时间步长 0)。
CharacterCasing
我通过选择该矩阵的第一行来选择第零个时间步长的第一颗星。如果我像往常一样循环数千个时间步长,我会使用数千个这样的矩阵并将它们附加到列表中,然后转换为具有数千列的 numpy 数组。 (因此 xvec1_0 将有数千列而不是一列)。
xvec0
array([[-5.00000000e+00,0.00000000e+00,-0.00000000e+00,-2.23606798e+00,0.00000000e+00],[ 5.00000000e+00,2.23606798e+00,[ 9.95024876e+02,4.46099737e-01,0.00000000e+00]])
由于 xvec1_0 只有一列,在这里我试图强制 numpy 将其识别为矩阵。它不起作用。
xvec1_0=xvec0[0]
我看到它有两个外括号,这意味着它是一个矩阵。但是,当我尝试像往常一样在 1000 多列上使用冒号索引时,我得到了一个错误。
np.reshape(xvec1_0,(1,6))
array([[-5.,0.,-0.,-2.23606798,0. ]])
为什么我不能使用 : 运算符来获取这个二维数组的第一行?在这个也适用于矩阵的更通用的代码中,我该如何做到这一点?
谢谢, 史蒂文
解决方法
我想我误读了 reshape 的函数定义。我以为它改变了它。没有,我需要分配一个输出,就像这样
xvec0_1 = np.reshape(xvec1_0,(1,6))
xvec1_0[:,0:3]
array([[-5.,0.,0.]])
xvec1_0
array([[-5.,-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.]])
x = np.zeros((6,))
print(x.shape)
x = np.reshape(x,6))
print(x[:,0:3]
(6,)
[[0. 0. 0.]]
array([[0.,0.]])
也许我应该想到这些测试中的一些,但是当我看到 np.reshape 的输出时,我认为我已经找到了最基本的测试。我真的很感谢我朋友的帮助,希望我的问题没有浪费任何人的时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。