小编Kev*_*vin的帖子

沿着下三角形numpy数组的每一行翻转非零值

我有一个较低的三角形数组,如B:

B = np.array([[1,0,0,0],[.25,.75,0,0], [.1,.2,.7,0],[.2,.3,.4,.1]])

>>> B
array([[ 1.  ,  0.  ,  0.  ,  0.  ],
       [ 0.25,  0.75,  0.  ,  0.  ],
       [ 0.1 ,  0.2 ,  0.7 ,  0.  ],
       [ 0.2 ,  0.3 ,  0.4 ,  0.1 ]])
Run Code Online (Sandbox Code Playgroud)

我想将它翻转为:

array([[ 1.  ,  0.  ,  0.  ,  0.  ],
       [ 0.75,  0.25,  0.  ,  0.  ],
       [ 0.7 ,  0.2 ,  0.1 ,  0.  ],
       [ 0.1 ,  0.4 ,  0.3 ,  0.2 ]])
Run Code Online (Sandbox Code Playgroud)

也就是说,我想获取所有正值,并在正值内反转,留下尾随零.这不是什么fliplr:

>>> …
Run Code Online (Sandbox Code Playgroud)

python arrays reverse numpy

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

在索引上求和2D数组的值

我需要扩展这个问题,它根据第二个数组的索引对数组的值求和.让A是结果数组,B是索引数组,并且C要被总计在阵列.然后A[i] = sumC这样index(B) == i.

相反,我的设置是

N = 5
M = 2

A = np.zeros((M,N))
B = np.random.randint(M, size=N) # contains indices for A
C = np.random.rand(N,N)
Run Code Online (Sandbox Code Playgroud)

我需要 A[i,j] = sum_{k in 0...N} C[j,k]这样的C[k] == i,即以B匹配i的索引为条件的rowum.有没有一种有效的方法来做到这一点?对于我的应用程序,N大约为10,000,M大约为20.在最小化问题中每次迭代都会调用此操作...我当前的循环方法非常慢.

谢谢!

python indexing numpy rowsum

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

Pandas 中作为列的集合的交集

我有一个 df,例如:

df=pd.DataFrame.from_items([('i', [set([1,2,3,4]), set([1,2,3,4]), set([1,2,3,4]),set([1,2,3,4])]), ('j', [set([2,3]), set([1]), set([4]),set([3,4])])])
Run Code Online (Sandbox Code Playgroud)

所以它看起来像

>>> df
              i       j
0  {1, 2, 3, 4}  {2, 3}
1  {1, 2, 3, 4}     {1}
2  {1, 2, 3, 4}     {4}
3  {1, 2, 3, 4}  {3, 4}
Run Code Online (Sandbox Code Playgroud)

我想计算 df.i.intersection(df.j) 并将其分配为列 k。也就是说,我想要这个:

df['k']=[df.i.iloc[t].intersection(df.j.iloc[t]) for t in range(4)]

>>> df.k
0    {2, 3}
1       {1}
2       {4}
3    {3, 4}
Name: k, dtype: object
Run Code Online (Sandbox Code Playgroud)

有 df.apply() 吗?实际的 df 是数百万行。

python intersection set pandas

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

numpy数组的计算/操作

希望尽快进行此计算.我有X作为nxm numpy数组.我想将Y定义为以下内容:

Y_11 = 1 / (exp(X_11-X_11) + exp(X_11-X_12) + ... exp(X_11 - X_1N) ).

或Y_00

1/np.sum(np.exp(X[0,0]-X[0,:]))

所以基本上,Y也是nxm,其中i,j元素是1/sum_j'exp(X_ij - X_ij')

任何提示都会很棒!谢谢.

请求的示例代码:

np.random.seed(111)
J,K = 110,120
X = np.random.rand(J,K)
Y = np.zeros((J,K))
for j in range(J):
    for k in range(K):
        Y[j,k] = 1/np.sum(np.exp(X[j,k]-X[j,:]))

# note each row will sum to 1 under this operation
np.sum(Y,axis=1)
Run Code Online (Sandbox Code Playgroud)

python performance numpy sum numpy-einsum

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

矢量化numpy赋值

我通过查找其他numpy数组中的值为numpy数组赋值.这些数组可能有不同的索引.这是一个例子:

import numpy as np
A=1; B=2; C=3; D=4; E=5
X = np.random.normal(0,1,(A,B,C,E))
Y = np.random.normal(0,1,(A,B,D))
Z = np.random.normal(0,1,(A,C))
Result = np.zeros((A,B,C,D,E))
for a in range(A):
    for b in range(B):
        for c in range(C):
            for d in range(D):
                for e in range(E):
                    Result[a,b,c,d,e] = Z[a,c] + Y[a,b,d] + X[a,b,c,e]
Run Code Online (Sandbox Code Playgroud)

优化此代码的最佳方法是什么?我可以使用Result [a,b,c,d,:] = Z [a,c] + Y [a,b,d] + X [a,b,c,:]删除E for循环.但那么如何删除其余的循环?我还在考虑在分配之前可以操作X,Y,Z,因此它可以轻松地与Result的尺寸合并.必须有更优雅的方式.谢谢你的提示.

python arrays numpy

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