英文:
In Pandas or Numpy how do you multipaly reduce with XOR a row until all reductions are reduced until a final bottowm row
问题
在Pandas或Numpy中,如何多次按行进行减少,直到所有减少操作减少到最后一行?
我想按一种方式减少我的B列,每个项目都进行异或操作,直到最后一行:[1, 8, 6, 12, 1, 2],以便我可以保存在C列中。
我尝试使用apply函数和循环,但对于大型数据集来说这可能非常昂贵。是否有人有更好的方法,而不是使用循环逐行创建行,不太容易将其减少到一行?(因为我使用非常大的数据集,这只是一个示例)
英文:
In Pandas or Numpy how do you multiplely reducea row until all reductions are reduced until a final bottowm row
ok i want to reduce my B column in way keeps xoring down each item until the final row: [1 ,8 , 6 , 12 , 1 , 2] so i can save it row C
if tried using an apply loo but this can get very expensive for large datasets. Does anyone have a shortcutor better method thah using a loop to create row after row with
not the easist logic to reduce this to the row?
Here is the data the second number version how i xor each next row to obtain an answer for a new list and keep continuing down to a final result. this is quite slow and
was looking for a better solution
A B C
0 12 2 0
1 10 6 0
2 2 8 0
3 9 11 0
4 5 12 0
5 0 5 0
6 4 4 0
for example column B looks like this with a .T transform:
0 1 2 3 4 5 6
A 12 10 2 9 5 0 4
B 2 6 8 11 12 5 4
so basically is I do these operations:
2 ^ 6. which is 4
6 ^ 8, which is 14
8 ^ 11 which is 3
11 ^ 12 which is 7
5 ^ 4 which is 1. which I store in a separate array because I only want the final result. So now I have
so is have [ 4, 14, 3, 7, 1 ] and a second array with [1]
4^14 = 10, 14^3=13 3^7=4, 7^1 =1
no I have to keep reducing
[10, 3, 4, 14, 8]
10^3 = 9 3^4 = 7, 4^14=8. and I manually move the last term to the new array which is now [1, 8]
I do this so forth so my array has all the final results and end up with
the final result of each iterative reduction: [1 , 8 , 6 , 12 ,1 ,2] as shown below:
A B
[[12 2]
[10 6] 4
[ 2 8] 14 10
[ 9 11] 3 3 9
[ 5 12] 7 4 7 14
[ 0 5] 9 14 10 13 3
[ 4 4] 1 8 6 12 1 2
so that the final out come is the last row in column C
A B C
0 12 2 1
1 10 6 8
2 2 8 6
3 9 11 12
4 5 12 1
5 0 5 2
6 4 4 0
ok i want to reduce my B column in a that way keeps xoring down each item until the final row: [1 ,8 , 6 , 12 , 1 , 2] so i can save it row C
if tried using an apply function and loop but this can get very expensive for large datasets. Does anyone have a shortcutor better method thah using a loop to create row after row with not the easist logic to reduce this to the row?(as I work with very large data sets, this is just an example )
答案1
得分: 1
这可以通过一个单一的循环来完成。为了提高性能,您可以使用 numba
。
arr = np.array([2, 6, 8, 11, 12, 5, 4]) # 列 B
n = len(arr)
results = []
while n > 1:
results.append(np.bitwise_xor(arr[:n-1], arr[1:]))
arr = results[-1]
n = arr.size
holder = np.zeros((len(results), len(results)))
indices = np.triu_indices(len(holder)) # holder 的上三角索引
holder[indices] = np.concatenate(results, axis=0)
print(holder[:, -1])
>> [ 1. 8. 6. 12. 15. 2.]
英文:
This can be done with one single loop. For performance you can used numba
maybe.
arr = np.array([2, 6, 8, 11, 12, 5, 4]) # column B
n = len(arr)
results = []
while n > 1:
results.append(np.bitwise_xor(arr[:n-1], arr[1:]))
arr = results[-1]
n = arr.size
holder = np.zeros((len(results), len(results)))
indices = np.triu_indices(len(holder)) # indices of upper triangle of holder
holder[indices] = np.concatenate(results, axis=0)
print(holder[:,-1])
>> [ 1. 8. 6. 12. 15. 2.]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论