【问题标题】:Using the colon operator to slice columns in numpy when it might be a vector or might be a matrix当它可能是向量或矩阵时,使用冒号运算符对 numpy 中的列进行切片
【发布时间】: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


    【解决方案1】:

    我想我误读了 reshape 的函数定义。我以为它改变了它。没有,我需要分配一个输出,像这样

    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 的输出时,我认为我已经找到了最基本的测试。我非常感谢朋友的帮助,希望我的问题没有浪费任何人的时间。

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2013-01-06
      • 2015-08-01
      相关资源
      最近更新 更多