关于访问元素的棘手问题

时间:2018-11-22 01:58:51

标签: python numpy

因此,我从3个嵌套列表中创建了一个数组(至少我认为这是3个列表中的数组),我想访问其中的三个对角元素。我已经创建了数组,但是如何访问其中的三个对角线元素?

from numpy import *
test1 = arange(27).reshape(3,3,3)
test1

结果:

array([[[ 0,  1,  2],
      [ 3,  4,  5],
      [ 6,  7,  8]],

     [[ 9, 10, 11],
      [12, 13, 14],
      [15, 16, 17]],

     [[18, 19, 20],
      [21, 22, 23],
      [24, 25, 26]]])

2 个答案:

答案 0 :(得分:0)

这是一种列表理解方法:

const EwdsUserTable = (props) => {   
let counter = 0; 
let ewdsData = props.data;
    if (ewdsData) { 
        var ewdsUserRows = ewdsData.map(function (ewdsUser) {
            return (            
               <EwdsUserRow ewdsUser={ewdsUser} key={counter++} />                               
            );
        });                 
}   
return (
     <div className="ewdsUserTable" >
            <table id="mytable" className="table table-striped table-bordered table-condensed fixed">               
            <caption>EWDS Users</caption>               
                <thead>
                    <tr>
                        <th className="sort" type="string">User Name</th>
                        <th className="sort" type="string">Email Address</th>
                        <th>Pwd Changed</th>
                        <th type="date">Last Logon</th>                            
                        <th>Locked</th>
                        <th className="sort" type="string">Disabled</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    {ewdsUserRows}                  
                </tbody>    
            </table>
        </div>
);    

答案 1 :(得分:0)

有几种方法可以实现您的目标。在这里,我将重点介绍布尔掩码的使用。

首先创建布尔3x3单位矩阵:即对角线为True,而每个对角线条目均为False。 然后将布尔值蒙版覆盖在原始ndarray上以获得对角线。

import numpy as np
test1 = np.arange(27).reshape(3,3,3)

>>> diag = np.eye(3, dtype=bool)
>>> test1[:, diag]
array([[ 0,  4,  8],
       [ 9, 13, 17],
       [18, 22, 26]])

如您所见,这给出了一个二维数组,其中每一行是第零个,第一个和第二个的对应对角线 3d阵列中的2d阵列。

顺便说一句,避免使用import *,这会引起很多麻烦,因为如果破坏名称空间抽象,您 有。在上面的示例中,如果numpy定义了diag函数或变量,该怎么办?如果在numpy之后导入另一个包并且恰好具有其自己的arange函数,则同样,您将掠过numpy的arange函数。 优先选择显式导入而不是星级导入。