小编mar*_*ray的帖子

如何防止TypeError:列表索引必须是整数,而不是在将python列表复制到numpy数组时的元组?

我正在尝试使用另一个名为mean_data的数组创建3个numpy数组/列表,如下所示:

---> 39 R = np.array(mean_data[:,0])
     40 P = np.array(mean_data[:,1])
     41 Z = np.array(mean_data[:,2])
Run Code Online (Sandbox Code Playgroud)

当我尝试运行程序时,我收到错误:

TypeError: list indices must be integers, not tuple
Run Code Online (Sandbox Code Playgroud)

mean_data列表看起来像这个样本......

[6.0, 315.0, 4.8123788544375692e-06],
[6.5, 0.0, 2.259217450023793e-06],
[6.5, 45.0, 9.2823565008402673e-06],
[6.5, 90.0, 8.309270169336028e-06],
[6.5, 135.0, 6.4709418114245381e-05],
[6.5, 180.0, 1.7227922423558414e-05],
[6.5, 225.0, 1.2308522579848724e-05],
[6.5, 270.0, 2.6905672894824344e-05],
[6.5, 315.0, 2.2727114437176048e-05]]
Run Code Online (Sandbox Code Playgroud)

我不知道如何防止这个错误,我尝试创建mean_data作为np.array并使用np.append为其添加值但是这也没有解决问题.

这是追溯(之前使用的是ipython)

Traceback (most recent call last):
  File "polarplot.py", line 36, in <module>
    R = np.array(mean_data[:,0])
TypeError: list indices must be integers, not tuple
Run Code Online (Sandbox Code Playgroud)

我试图创建一个数组的另一种方式是:

mean_data = np.array([])

for …
Run Code Online (Sandbox Code Playgroud)

python numpy

38
推荐指数
3
解决办法
18万
查看次数

使用SciPy DCT功能创建2D DCT-II

我正在labview中创建2D DCT-II,但希望能够检查我的输出是否正确.SciPy有一个很好的DCT功能,默认为DCT-II但是1D.

我想让它适用于2D数组.为此,必须将DCT应用于列,然后必须再次将DCT应用于此结果的行.

我不确定我想用它做什么功能.我试过np.rot90,它将numpy数组逆时针旋转90度,如下所示:

import numpy as np
from scipy.fftpack import dct

a = np.array([[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0]])

b = dct(np.rot90(dct(a),3))
Run Code Online (Sandbox Code Playgroud)

但是,这会输出以下内容:

array([[ 1152.        ,     0.        ,     0.        ,     0.        ,
            0.        ,     0.        ,     0.        ,     0.        ],
       [ -412.30867345,     0.        ,     0.        ,     0.        ,
            0.        ,     0.        ,     0.        ,     0.        ],
       [    0.        ,     0.        ,     0.        ,     0.        ,
            0.        ,     0.        ,     0.        ,     0.        ],
       [  -43.10110726,     0.        , …
Run Code Online (Sandbox Code Playgroud)

scipy

11
推荐指数
3
解决办法
8359
查看次数

if语句在单行上进行多次逻辑比较

我想在Python中的逻辑条件做多重比较,但我不知道正确的方式圆了的andor.我有2个陈述.

声明1:

#if PAB is more than BAC and either PAB is less than PAC or PAC is more than BAC
if PAB > BAC and PAB< PAC or PAB > BAC and PAC>BAC: 
Run Code Online (Sandbox Code Playgroud)

声明2:

#if PAB is more than BAC and PAC is less than PAB or if PAB is less than BAC and PAC is less than BAC
if PAB >BAC and  PAC<PAB or PAB<BAC and  PAC<BAC
Run Code Online (Sandbox Code Playgroud)

是不是正确的两种方式去做呢?

谢谢.

python

8
推荐指数
1
解决办法
2万
查看次数

单元测试失败时打印自定义字符串

我正在使用 for 循环遍历配置文件并将变量传递给单元测试。

for module in config:
        for testcase in config[module]:
            data = config[dict.keys(config)[0]][testcase]['foo']
            test_foo(self, data)
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是失败可能是相似的,并在测试结束时打印出来。所以没有办法知道哪个变量失败了,只有 n 个变量没有通过测试。有没有办法在失败时打印包含失败变量的自定义字符串?或者也许有更好的方法来测试我的配置文件中的变量?

python python-unittest

6
推荐指数
1
解决办法
1484
查看次数

准备好的列Numpy/Matplotlib

我正在尝试阅读3列,numpy.loadtext但我收到错误:

ValueError: setting an array element with sequence.
Run Code Online (Sandbox Code Playgroud)

数据样本:

0.5     0   -22
0.5     0   -21
0.5     0   -22
0.5     0   -21
Run Code Online (Sandbox Code Playgroud)

第1列的距离从0.5增加到6.5,每个距离有15个数据样本.

第2列是一个角度,每当距离返回0.5时,该角度增加45度.

第3列包含被测数据(RSSI),从约-20降至-70.

我使用以下代码尝试将三列加载到单独的数组中:

import numpy as np

r, theta, RSSI, null = np.loadtxt("bot1.txt", unpack=True)
Run Code Online (Sandbox Code Playgroud)

我将在每个距离/角度组合中对采样的RSSI进行平均,然后我希望将数据绘制为3D极坐标图.虽然我还没有这么远.

有什么想法,为什么np.loadtxt不工作?

python numpy

2
推荐指数
1
解决办法
293
查看次数

如何将字符串传递给 pexpect spawn?

我想 ssh 到网络上的另一个节点作为更大的 python 脚本的一部分,我正在使用 pexpect,当我执行以下操作时,它可以工作:

session=spawn('ssh root@172.16.210.254')
Run Code Online (Sandbox Code Playgroud)

我想用变量替换地址,这样我就可以循环访问列表中的地址,但是当我尝试时:

address = "172.16.210.253"

session=spawn('ssh root@'address)
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为以这种方式使用地址是无效语法。正确的语法是什么?

python pexpect

2
推荐指数
1
解决办法
2789
查看次数

创建具有固定大小的列表或数组?

我想创建一个数组或列表,在任何给定时间只包含3个条目.该函数应循环并且每个循环1条目将被添加到列表中,将最旧的值输出,然后将根据列表中的3个值计算值.

我试过了:

import numpy as np

z = np.ndarray((3,),float)

np.append(z, [12, 14.56, 12.46, 1.56])
Run Code Online (Sandbox Code Playgroud)

这会创建一个只有3个值(afaik)的numpy数组,但是数组中填充了奇怪的值:

z= ([  1.56889217e-163,   1.01899555e-297,   1.03395110e-297])
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么/我做错了什么或者有更好的解决方案我想做什么?

python numpy

2
推荐指数
1
解决办法
2525
查看次数

如果我在python中使用for循环,我是否需要将用于计数的变量设置为0或者for循环是否设置它?

对不起,那里有一个措辞严厉的问题,但我基本上问我是否有:

for i in range(0,10):
Run Code Online (Sandbox Code Playgroud)

我需要设置i = 0前一点还是for循环设置i = 0

我是主要使用C来自python的新手,在C中总是有一部分for循环设置i = 0(或其他).

python

1
推荐指数
1
解决办法
116
查看次数

如何通过行而不是变量中的字符进行for循环循环?

我有以下代码ssh到节点并从其他设备中找到RSSI.

bot_ipv6是ssh到的ipv6地址列表,脚本使用pexpect到ssh.

for address in bot_ipv6:
    session=spawn('ssh -6 root@'+address+'%wlan0')
    #session.logfile = stdout
    session.expect('password:')
    session.sendline("123456")
    session.expect(prompt)
    session.sendline("iwlist wlan0 scan")
    session.expect(prompt)
    data=session.before
    session.close()
Run Code Online (Sandbox Code Playgroud)

数据现在包含该iwlist wlan0 scan设备的输出.

我想查看数据并获取地址及其相应的RSSI.当该命令可以在本地运行并输出到文件时,此代码有效:

with open("rssi.txt") as fd:
    for line in fd:
        cell_line = match(line,"Cell ")
        if cell_line != None:
            cells.append([])
            line = cell_line[-27:]
        cells[-1].append(line.rstrip())


for cell in cells:
    level.append(matching_line(cell,"Quality=").split()[2].split('=')[1])
    address.append(matching_line(cell,"Address: "))

scanned=dict(zip(address, level))
Run Code Online (Sandbox Code Playgroud)

匹配和匹配行是其中定义的函数,其中在文件中查找匹配字符的内容.

我的问题是我不知道如何将数据输出到文件,但如果我尝试像使用文件时那样检查输出数据中的内联:

for line in data:
        cell_line = match(line,"Cell ")
        if cell_line != None:
            cells.append([])
            line = cell_line[-27:]
        cells[-1].append(line.rstrip())
Run Code Online (Sandbox Code Playgroud)

而不是线条,它循环每个字符.

如何将输出打印到我可以在本地打开的文件并像之前一样扫描或循环数据中的行而不是单个字符?

这里是一个数据样本的示例(为了得到它我将打印数据放入脚本然后只是从输出中复制并粘贴在这里,希望没有格式化丢失):

iwlist …
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
822
查看次数

标签 统计

python ×8

numpy ×3

pexpect ×1

python-unittest ×1

scipy ×1