标签: numpy

Python - 生成符合标准的大型集合组合的最有效方法?

我试图在受边界条件约束的投资组合中生成所有可能的金融工具组合。

例如,假设我有一组列表,这些列表代表对投资组合的分配,受每种工具的总投资组合规模的最小和最大百分比影响:

"US Bonds" = {0.10,0.15,0.20,0.25,0.30}
"US Equities" = {0.25, 0.30, 0.35, 0.40, 0.45, 0.50}
"European Bonds" = {0.10, 0.15, 0.20}
"European Equities = {0.20,0.25,0.30,0.35,0.40,0.45,0.50}
 ...
"Cash" = {0.0, 0.05, 0.10, 0.15,...0.95}
Run Code Online (Sandbox Code Playgroud)

我的资产清单如下所示:

[In]
Asset

[Out]
[[0.1, 0.15, 0.2, 0.25, 0.30],
[0.25, 0.30,0.35, 0.40, 0.45, 0.50],
[0.1, 0.15, 0.2],
[0.20, 0.25, 0.30,0.35, 0.40, 0.45, 0.50]
...
[0.0, 0.05, 0.1, 0.15, 0.2, 0.25,...0.95]]
Run Code Online (Sandbox Code Playgroud)

在每种工具组合之和必须 = 1 的条件下,生成所有可能的投资组合的最有效方法是什么?

现在,我正在创建一个“投资组合”列表,如下所示:

portfolios  = [item for item in itertools.product(*asset) if  np.isclose(sum(item),1)]
Run Code Online (Sandbox Code Playgroud)

(注意,'np.isclose' 负责处理时髦的 fp 算术)。 …

python combinations numpy combinatorics

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

设置seaborn联合图的轴刻度值

我试图使联合图的 x 轴和 y 轴(包括轴刻度值)以特定值开始和结束,并以设定的增量进行缩放。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

g = sns.jointplot(x="LONGITUDE", y="LATITUDE", data=data,
                      kind='reg', color="#774499", dropna=True, size=7, space=0.3, ratio=5,
                      xlim=(-180,180), ylim=(-90,90), fit_reg=False);
plt.rc("legend", fontsize=15)
plt.xlabel('Longitude', fontsize=15)
plt.ylabel('Latitude', fontsize=15)
plt.title('Spatial Location Plot', fontsize=15 )
plt.tick_params(axis="both", labelsize=15)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

请注意,两个轴的下边缘和上边缘没有任何刻度值。我希望刻度值完全使用我在 xlim() 和 ylim() 中指定的值在轴边缘开始和结束。

我首选的 X 轴和 Y 轴增量分别为 90 度和 45 度。所以,我希望 X 轴看起来像这样:-180, -90, 0, 90, 180。Y 轴是:-90, -45, 0, 45, 90。感谢您的建议。

python numpy matplotlib pandas seaborn

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

Python 中具有 nan 值的数组之间的平均值

我在Python中有三个数组

a = np.array([[10., 10., 10., 10.], [10., nan, 10., 10.], [10., 10., nan, 10.]])
b = np.array([[10., 10., 10., 10.], [10., 10., 10., nan], [10., 10.,nan, 10]])
c = np.array([[10., nan, 10., 10.], [nan, 10., 10., nan], [10., 10.,nan, 10]])
Run Code Online (Sandbox Code Playgroud)

我需要计算平均值以获得以下数组:

>>> myavg 
array([[ 10.,  10,  10.,  10.],
       [ 10,  10.,  10.,  10.],
       [ 10.,  10.,  nan,  10.]])
Run Code Online (Sandbox Code Playgroud)

第一步是转换新的 [0,1] 数组中的数组并求和(即 3 = 每个数组中的数据,2 = 仅两个数组中的数据,1 = 多个数组中的数据,0 = 无数据)

aa = a.copy()
bb = b.copy()
cc = c.copy() …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy average nan

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

Python 中 3D 数据的插值

我有 3D 数据。我想逐层(在平面 X,Y 上)插入这些数据,因为计算每一层都需要很多时间。

我尝试使用 interp2D 函数并循环遍历各层,但 f 似乎仅适用于 i0 的最后一个值。

X = np.linspace(10., 15., 21)
Y = np.linspace(0.05, 1.85, 10)
for i0 in np.arange(N):
    f = interpolate.interp2d(X, Y, data[:,:,i0], kind='linear')

Xnew = np.linspace(10., 15., 41)
Ynew = np.linspace(0.05, 1.85, 20)
datanew = f(Xnew,Ynew)
Run Code Online (Sandbox Code Playgroud)

如何对数据的每一层进行插值?

谢谢

python interpolation numpy scipy

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

我什么时候应该担心 numpy 值下溢?

我正在使用 Python numpy 进行计算。这是生成的 numpy 数组:

[  5.15054786e-11   5.15251385e-11   5.15262922e-11 ...,   5.21100674e-11
5.21097550e-11   5.21088179e-11]
Run Code Online (Sandbox Code Playgroud)

这些都非常小。在什么时候我应该担心计算中的下溢?这些需要超精确。是否有一个明确的值范围需要担心,或者是否有一个说明该值的参考?

python numpy underflow

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

查找未知形状的 numpy ndarray 的第一个元素

如果您不知道数组的形状,是否有一种简单的方法可以提取 ndarray 的第一项?

例如。给定以下数组:

arr = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]]])

>>> [[[ 1  2  3  4]
      [ 5  6  7  8]
      [ 9 10 11 12]]]
Run Code Online (Sandbox Code Playgroud)

我不想1假设我知道这个数组的形状是 1*3*4。

我还对最小化解决方案的内存和 CPU 要求感兴趣。

python arrays numpy python-2.7

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

如何用其他二维数组值替换二维数组中的 nan

例如,我有一个名为 c 的二维数组。

>>> c = numpy.array([[1,np.nan,3],[4,5,6],[7,8,9]])
>>> c
array([[  1.,  nan,   3.],
       [  4.,   5.,   6.],
       [  7.,   8.,   9.]])
Run Code Online (Sandbox Code Playgroud)

其他命名为 b.

>>> b
array([[1, 0, 1],
       [0, 0, 0],
       [1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

在数组索引 c[0][1] 中,有 nan 我想用 b[0][1] 替换它。不使用for循环。

numpy 中是否有任何方法可以让我这样做?

我希望结果如下所示。

>>> c
array([[ 1.,  0.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

numpy 数组索引中的隐式转置

我遇到了一个奇怪的问题:

from numpy import zeros, arange
aa = zeros([1, 3, 10])
aa[0, :, arange(5)].shape
Run Code Online (Sandbox Code Playgroud)

运行这个给了我(5,3),但我期待着(3,5)

然而,运行以下命令给了我(3,5)预期的结果。

aa = zeros([3, 10])
aa[:, arange(5)]
Run Code Online (Sandbox Code Playgroud)

作为我的程序的一部分,这很容易修复,但它完全毁了我的信念。

我试图搜索已经回答的类似问题,但不知道要搜索什么。

谢谢您,祝您农历新年快乐!

python indexing numpy

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

在numpy数组中查找连续的

1如何找到以下 numpy 数组的每一行中连续 s (或任何其他值)的数量?我需要一个纯 numpy 解决方案。

array([[0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0],
       [0, 0, 1, 0, 0, 1, 2, 0, 0, 1, 1, 1],
       [0, 0, 0, 4, 1, 0, 0, 0, 0, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

我的问题有两个部分,第一部分:1连续的 s 的最大数量是多少?应该

array([2,3,2])
Run Code Online (Sandbox Code Playgroud)

在示例情况中。

1其次,连续的第一组多个连续 s 的开始索引是多少?对于示例情况,这将是

array([3,9,9])
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我将 2 个连续的1s 放在一行中。但应该可以将其更改为1连续 5 个连续的 s,这很重要。

使用 回答了类似的问题np.unique但它仅适用于一行,不适用于多行数组,因为结果将具有不同的长度。

python numpy

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

scipy.optimize.lsq_线性边界误差

我试图提出以下公式:

http://docs.scipy.org/doc/scipy/reference/ generated/scipy.optimize.lsq_linear.html#scipy.optimize.lsq_linear

我有以下代码,但它不接受 6 个单独变量的边界,它只接受一个元组,这使得所有变量的边界都相同。

## cut benchmark out of data
benchmark_ser = data_df.ix[:,0]
##  get out the stocks data
stocks_df = data_df.ix[:,1:]

## create/get bounds
bds = (0,.2) # <- i want to change this line 
             #    to something that will provide 
             #    a bound for each variable like 
             #    [(0,.1),(0,.2),(0,.5),(0,.6)]

wgt_arr = sp.optimize.lsq_linear(stocks_df, benchmark_ser, bds)
Run Code Online (Sandbox Code Playgroud)

我目前收到以下错误:

ValueError: 'bounds' must contain 2 elements.
Run Code Online (Sandbox Code Playgroud)

谢谢

python arrays tuples numpy scipy

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