我有一个较低的三角形数组,如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) 我需要扩展这个问题,它根据第二个数组的索引对数组的值求和.让A是结果数组,B是索引数组,并且C要被总计在阵列.然后A[i] = sum过C这样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.在最小化问题中每次迭代都会调用此操作...我当前的循环方法非常慢.
谢谢!
我有一个 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 是数百万行。
希望尽快进行此计算.我有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) 我通过查找其他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 ×5
numpy ×4
arrays ×2
indexing ×1
intersection ×1
numpy-einsum ×1
pandas ×1
performance ×1
reverse ×1
rowsum ×1
set ×1
sum ×1