Suppose i already have a very large 2d matrix(like [10000,10000]) and i want to create a new matrix A(like [10000,10000,2]) such that A[i,j,:]=[i,j] The intuitive way is as follows:
import numpy as np
c = np.zeros([10000,10000,2])
d1,d2 = c.shape[:2]
for i in range(d1):
for j in range(d2):
c[i,j,:] = (i,j)
# it's time-consuming
However, it's time comsuming
I decide to use broadcast :
d = np.zeros([10000,10000,2])
d[:,:,0] = np.arange(10000).reshape(10000,1) np.zeros(10000)
d[:,:,1] = np.arange(10000).reshape(1,10000) np.zeros(10000).T
It works.
But Is there any other way to do this? I am newbee to deal with these kinds of large matrices, so I decided to look for some information about it.At first I thought it belongs to the fields of big data.Apparently,i am wrong. Where can I find some information? Thank you so much for your reply and advice.
CodePudding user response:
Use np.indices
and transpose:
>>> shape = 10, 10
>>> np.indices(shape, float).transpose(1, 2, 0)
array([[[0., 0.],
[0., 1.],
[0., 2.],
[0., 3.],
[0., 4.],
[0., 5.],
[0., 6.],
[0., 7.],
[0., 8.],
[0., 9.]],
[[1., 0.],
[1., 1.],
[1., 2.],
[1., 3.],
[1., 4.],
[1., 5.],
[1., 6.],
[1., 7.],
[1., 8.],
[1., 9.]],
[[2., 0.],
[2., 1.],
[2., 2.],
[2., 3.],
[2., 4.],
[2., 5.],
[2., 6.],
[2., 7.],
[2., 8.],
[2., 9.]],
[[3., 0.],
[3., 1.],
[3., 2.],
[3., 3.],
[3., 4.],
[3., 5.],
[3., 6.],
[3., 7.],
[3., 8.],
[3., 9.]],
[[4., 0.],
[4., 1.],
[4., 2.],
[4., 3.],
[4., 4.],
[4., 5.],
[4., 6.],
[4., 7.],
[4., 8.],
[4., 9.]],
[[5., 0.],
[5., 1.],
[5., 2.],
[5., 3.],
[5., 4.],
[5., 5.],
[5., 6.],
[5., 7.],
[5., 8.],
[5., 9.]],
[[6., 0.],
[6., 1.],
[6., 2.],
[6., 3.],
[6., 4.],
[6., 5.],
[6., 6.],
[6., 7.],
[6., 8.],
[6., 9.]],
[[7., 0.],
[7., 1.],
[7., 2.],
[7., 3.],
[7., 4.],
[7., 5.],
[7., 6.],
[7., 7.],
[7., 8.],
[7., 9.]],
[[8., 0.],
[8., 1.],
[8., 2.],
[8., 3.],
[8., 4.],
[8., 5.],
[8., 6.],
[8., 7.],
[8., 8.],
[8., 9.]],
[[9., 0.],
[9., 1.],
[9., 2.],
[9., 3.],
[9., 4.],
[9., 5.],
[9., 6.],
[9., 7.],
[9., 8.],
[9., 9.]]])