微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 numpy 可能是向量或矩阵时,使用冒号运算符对 numpy 中的列进行切片

如何解决当 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 举报,一经查实,本站将立刻删除。