小编Ric*_*all的帖子

删除numpy数组中的掩码元素

我有一些包含掩盖元素的数组(Numpy.MaskedArray例如)

data = [0,1,masked,3,masked,5,...]
Run Code Online (Sandbox Code Playgroud)

掩模不遵循规则图案的地方.

我想遍历数组并简单地删除所有被屏蔽的元素以结束:

data = [0,1,3,5,...]
Run Code Online (Sandbox Code Playgroud)

我尝试了一个循环:

for i in xrange(len(data)):
    if np.ma.is_masked(data[i]):
        data.pop(i)
Run Code Online (Sandbox Code Playgroud)

但我得到错误: local variable 'data' referenced before assignment

我是否必须创建一个新数组并添加未屏蔽的元素?或者是否有MaskedArray可以自动执行此操作的功能?我看过文档,但对我来说并不明显.

谢谢!

python arrays numpy list

5
推荐指数
2
解决办法
3996
查看次数

从列表中随机删除“ x”个元素

我想从列表中随机删除一部分元素,而无需更改列表的顺序。

假设我有一些数据,但我想删除其中的1/4:

data = [1,2,3,4,5,6,7,8,9,10]
n    = len(data) / 4
Run Code Online (Sandbox Code Playgroud)

我在想我需要一个循环来遍历数据并删除一个随机元素'n'次?所以像这样:

for i in xrange(n):
    random = np.randint(1,len(data))
    del data[random]
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是最“ Pythonic”的方式吗?我的列表将有大约5000个元素,我想使用不同的'n'值进行多次。

谢谢!

python random list

4
推荐指数
2
解决办法
1257
查看次数

Python 使用 tabulate 打印列表

我正在尝试打印天文学模拟的输出,以便它在我的控制台中看起来不错。我生成了 4 个 numpy 数组,分别称为振幅、质量、周期和偏心率,我想将它们放在一个表中。每个数组的第一个索引是行星 1 的值,第二个索引是行星 2 的值,依此类推。

所以我的数组看起来像(值都是浮点数,例如“a1”只是一个占位符):

amp = [a1 a2 a3 a4]
mass = [m1 m2 m3 m4]
period = [p1 p2 p3 p4]
ecc = [e1 e2 e3 e4]
Run Code Online (Sandbox Code Playgroud)

我希望我的桌子看起来像:

planet|amp|mass|period|ecc
1     |a1 |m1  |p1    |e1
2     |a2 |m2  |p2    |e2
...
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 tabulate 和类似的东西:

print tabulate(['1', amp[0], mass[0], period[0], ecc[0]], headers=[...])
Run Code Online (Sandbox Code Playgroud)

但我收到“numpy.float64”对象不可迭代的错误

任何帮助,将不胜感激!

python arrays list

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

在python中绘制二进制数据

我有一些数据看起来像:

data = [1,2,4,5,9] (递增整数的随机模式)

我想将它绘制在一条二进制水平线上,以便 y=1 中指定的每个 x 值data,否则为零。

我有几个不同的data数组想要堆叠,类似于这种样式(这是 CCD 时钟数据,但绘图格式看起来很理想)

二元图

我想我需要为我的数据数组创建一个列表,但是如何为不在数组中的所有内容指定零值?

谢谢

python binary plot list matplotlib

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

在 Jupyter Notebook 中使用 Matplotlib 制作 3D 矩阵动画

我有一个形状为 (100,50,50) 的 3D 矩阵,例如

import numpy as np
data = np.random.random(100,50,50)
Run Code Online (Sandbox Code Playgroud)

我想创建一个动画,将每个大小为 (50,50) 的 2D 切片显示为热图或imshow

例如:

import matplotlib.pyplot as plt

plt.imshow(data[0,:,:])
plt.show()
Run Code Online (Sandbox Code Playgroud)

将显示该动画的第一个“帧”。我还想在 Jupyter Notebook 中显示此内容。我目前正在按照教程将内联笔记本动画显示为 html 视频,但我不知道如何用 2D 数组的切片替换 1D 行数据。

我知道我需要创建一个绘图元素、一个初始化函数和一个动画函数。按照这个例子,我尝试过:

fig, ax = plt.subplots()

ax.set_xlim((0, 50))
ax.set_ylim((0, 50))

im, = ax.imshow([])

def init():
    im.set_data([])
    return (im,)

# animation function. This is called sequentially
def animate(i):
    data_slice = data[i,:,:]
    im.set_data(i)
    return (im,)

# call the animator. blit=True means only re-draw the parts that …
Run Code Online (Sandbox Code Playgroud)

python matplotlib jupyter-notebook

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

2D 数组的 Numpy 梯度

我有一个 2D 数组正弦模式,想要绘制该函数的 x 和 y 梯度。我有一个二维数组image_data

def get_image(params):
    # do some maths on params
    return(image)

params = (a, b, c)
image_data = get_image(params)
Run Code Online (Sandbox Code Playgroud)

我用来numpy.gradient获取渐变:

gradients = numpy.gradient(image_data)
x_grad = gradients[0]
y_grad = gradients[1]
Run Code Online (Sandbox Code Playgroud)

绘制所有三个看起来像:

渐变

此图案不是 45 度。我希望 x 和 y 梯度不同。在我看来,应该是相对于两侧索引x_gradient[i][j]的梯度以及相对于上方和下方索引的梯度。由于图案稍微倾斜,因此梯度以不同的速率变化。image_data[i][j]y_gradient[i][j]image_data

我是否误解了我的数据或不理解numpy.gradient输出?

python arrays gradient numpy

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

如何将每个第n项保留在列表中并使其余的零

我试图建模并适应长时间序列中的噪声数据,我想看看如果我删除了大量的数据,我的拟合会发生什么.

我有很长的时间序列数据,我只对每个第n项感兴趣.但是,我仍然希望随着时间的推移绘制此列表,但删除了所有其他不需要的元素.

例如,对于n = 4,列表

a = [1,2,3,4,5,6,7,8,9,10...]
Run Code Online (Sandbox Code Playgroud)

应该成为

a_new = [1,0,0,0,5,0,0,0,9,0...]
Run Code Online (Sandbox Code Playgroud)

我不介意第n个项目的位置是否在序列的开头或结尾,我的系列实际上是任意的,并且很长以至于我删除的内容都无关紧要.例如'a_new'也可以是:

a_new = [0,0,0,4,0,0,0,8,0,0...]
Run Code Online (Sandbox Code Playgroud)

理想情况下,解决方案不依赖于列表的长度,但我可以将该长度作为变量.

编辑1:

我实际上想要空元素,而不是零,(如果可能的话?)所以:

a_new = [1,,,,5,,,,9...] 
Run Code Online (Sandbox Code Playgroud)

编辑2:

我还需要从我的时间序列中删除相应的元素,以便在绘制所有内容时,每个数据元素与时间序列元素具有相同的索引.

谢谢!

python list

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

Scipy lognorm拟合直方图

我正在将对数正态pdf拟合到一些合并的数据,但是我的曲线与数据不太匹配,请参见下图。我的代码是:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import lognorm

data = genfromtxt('data.txt')
data = np.sort(data)

# plot histogram in log space

ax.hist(data, bins=np.logspace(0,5,200),normed=1)
ax.set_xscale("log")

shape,loc,scale = lognorm.fit(data)

print shape, loc, scale

pdf = sp.stats.lognorm.pdf(data, shape, loc, scale)

ax.plot(data,pdf)

plt.show()
Run Code Online (Sandbox Code Playgroud)

看起来是这样的:

在此处输入图片说明

我是否需要以某种方式为形状,位置和比例提供合理的猜测?

谢谢!

python normal-distribution scipy

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

如何从列表中随机删除一定百分比的项目

我有两个相等长度的列表,一个是数据系列,另一个是时间序列.它们代表随时间测量的模拟值.

我想创建一个函数,从两个列表中随机删除一个设定的百分比或分数.即如果我的分数是0.2,我想从两个列表中随机删除20%的项目,但它们必须是相同的项目(每个列表中的相同索引)被删除.

例如,设n = 0.2(要删除20%)

a = [0,1,2,3,4,5,6,7,8,9]
b = [0,1,4,9,16,25,36,49,64,81]
Run Code Online (Sandbox Code Playgroud)

随机删除20%后,它们就变成了

a_new = [0,1,3,4,5,6,8,9]
b_new = [0,1,9,16,25,36,64,81]
Run Code Online (Sandbox Code Playgroud)

这种关系并不像示例那么简单,所以我不能只在一个列表上执行此操作,然后计算出第二个; 它们已经存在为两个列表.他们必须保持原始秩序.

谢谢!

python list

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

Python 输入验证:如何将用户输入限制为特定范围的整数?

初学者在这里,寻找有关输入验证的信息。

我希望用户输入两个值,一个必须是大于零的整数,下一个是 1-10 之间的整数。我已经看到很多输入验证函数对于这两个简单的情况似乎过于复杂,有人可以帮忙吗?

对于第一个数字(大于 0 的整数,我有):

while True:
    try:
        number1 = int(input('Number1: '))
    except ValueError:
        print("Not an integer! Please enter an integer.")
        continue
    else:
        break
Run Code Online (Sandbox Code Playgroud)

这也不会检查它是否为阳性,我希望它这样做。我还没有为第二个准备任何东西。任何帮助表示赞赏!

python validation exception-handling exception input

0
推荐指数
1
解决办法
3万
查看次数