user2323596
user2323596

Reputation: 533

Convert 1D array into numpy matrix

I have a simple, one dimensional Python array with random numbers. What I want to do is convert it into a numpy Matrix of a specific shape. My current attempt looks like this:

randomWeights = []
for i in range(80):
    randomWeights.append(random.uniform(-1, 1))
W = np.mat(randomWeights)
W.reshape(8,10)

Unfortunately it always creates a matrix of the form:

[[random1, random2, random3, ...]]

So only the first element of one dimension gets used and the reshape command has no effect. Is there a way to convert the 1D array to a matrix so that the first x items will be row 1 of the matrix, the next x items will be row 2 and so on?

Basically this would be the intended shape:

[[1, 2, 3, 4, 5, 6, 7, 8],
 [9, 10, 11, ... ,    16],
 [...,               800]]

I suppose I can always build a new matrix in the desired form manually by parsing through the input array. But I'd like to know if there is a simpler, more eleganz solution with built-in functions I'm not seeing. If I have to build those matrices manually I'll have a ton of extra work in other areas of the code since all my source data comes in simple 1D arrays but will be computed as matrices.

Upvotes: 17

Views: 83276

Answers (2)

Han Qiu
Han Qiu

Reputation: 641

You can use W.resize(), ndarray.resize()

Upvotes: 2

Junuxx
Junuxx

Reputation: 14251

reshape() doesn't reshape in place, you need to assign the result:

>>> W = W.reshape(8,10)
>>> W.shape
(8,10)    

Upvotes: 27

Related Questions