0% found this document useful (0 votes)
10 views4 pages

Numpy - Python Array - Matrix Dimension

Uploaded by

Mickaleto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views4 pages

Numpy - Python Array - Matrix Dimension

Uploaded by

Mickaleto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

11/4/24, 3:54 PM numpy - Python array/matrix dimension - Stack Overflow

Python array/matrix dimension


Asked 9 years, 6 months ago Modified 1 year, 9 months ago Viewed 412 times

I create two matrices

1 import numpy as np
arrA = np.zeros((9000,3))
arrB = np.zerros((9000,6))

I want to concatenate pieces of those matrices. But when I try to do:

arrC = np.hstack((arrA, arrB[:,1]))

I get an error:

ValueError: all the input arrays must have same number of dimensions

I guess it's because np.shape(arrB[:,1]) is equal (9000,) instead of (9000,1) , but I cannot
figure out how to resolve it.

Could you please comment on this issue?

python numpy matrix

Share Edit Follow Flag asked Apr 21, 2015 at 17:38


Leopoldo
805 2 11 23

1 I don't really see your issue here. You have a 9000x3 and a 9000x6 array, they are different sizes, so you
cant concat them together... am I missing something? – Mo H. Apr 21, 2015 at 17:39

I want to take 9000x3 array and concatenate it with 9000x1 array getting 9000x4 array. I hope this
comment describe my issue completely. – Leopoldo Apr 21, 2015 at 17:42

Yes the dimensions/size format of the matrices is wrong they need to be equal. Try np.hstack((arrA,
np.zeros((arrayB[1], 3)))) – user3679917 Apr 21, 2015 at 17:43

@Emyen it does not work. – Leopoldo Apr 21, 2015 at 17:51

https://stackoverflow.com/questions/29779401/python-array-matrix-dimension?rq=3 1/4
11/4/24, 3:54 PM numpy - Python array/matrix dimension - Stack Overflow

4 Answers Sorted by: Highest score (default)

You could preserve dimensions by passing a list of indices, not an index:

3 >>> arrB[:,1].shape
(9000,)
>>> arrB[:,[1]].shape
(9000, 1)
>>> out = np.hstack([arrA, arrB[:,[1]]])
>>> out.shape
(9000, 4)

Share Edit Follow Flag answered Apr 21, 2015 at 18:01


DSM
352k 67 601 500

This is easier to see visually.

Assume:
3
>>> arrA=np.arange(9000*3).reshape(9000,3)
>>> arrA
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
...,
[26991, 26992, 26993],
[26994, 26995, 26996],
[26997, 26998, 26999]])
>>> arrB=np.arange(9000*6).reshape(9000,6)
>>> arrB
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[ 12, 13, 14, 15, 16, 17],
...,
[53982, 53983, 53984, 53985, 53986, 53987],
[53988, 53989, 53990, 53991, 53992, 53993],
[53994, 53995, 53996, 53997, 53998, 53999]])

If you take a slice of arrB, you are producing a series that looks more like a row:

>>> arrB[:,1]
array([ 1, 7, 13, ..., 53983, 53989, 53995])

What you need is a column the same shape as a column to add to arrA:

>>> arrB[:,[1]]
array([[ 1],
[ 7],

https://stackoverflow.com/questions/29779401/python-array-matrix-dimension?rq=3 2/4
11/4/24, 3:54 PM numpy - Python array/matrix dimension - Stack Overflow
[ 13],
...,
[53983],
[53989],
[53995]])

Then hstack works as expected:

>>> arrC=np.hstack((arrA, arrB[:,[1]]))


>>> arrC
array([[ 0, 1, 2, 1],
[ 3, 4, 5, 7],
[ 6, 7, 8, 13],
...,
[26991, 26992, 26993, 53983],
[26994, 26995, 26996, 53989],
[26997, 26998, 26999, 53995]])

An alternate form is to specify -1 in one dimension and the number of rows or cols desired as the
other in .reshape() :

>>> arrB[:,1].reshape(-1,1) # one col


array([[ 1],
[ 7],
[ 13],
...,
[53983],
[53989],
[53995]])
>>> arrB[:,1].reshape(-1,6) # 6 cols
array([[ 1, 7, 13, 19, 25, 31],
[ 37, 43, 49, 55, 61, 67],
[ 73, 79, 85, 91, 97, 103],
...,
[53893, 53899, 53905, 53911, 53917, 53923],
[53929, 53935, 53941, 53947, 53953, 53959],
[53965, 53971, 53977, 53983, 53989, 53995]])
>>> arrB[:,1].reshape(2,-1) # 2 rows
array([[ 1, 7, 13, ..., 26983, 26989, 26995],
[27001, 27007, 27013, ..., 53983, 53989, 53995]])

There is more on array shaping and stacking here

Share Edit Follow Flag edited Jan 15, 2023 at 21:12 answered Apr 21, 2015 at 18:32
Glorfindel dawg
22.6k 13 88 116 103k 23 135 214

I would try something like this:

2 np.vstack((arrA.transpose(), arrB[:,1])).transpose()

https://stackoverflow.com/questions/29779401/python-array-matrix-dimension?rq=3 3/4
11/4/24, 3:54 PM numpy - Python array/matrix dimension - Stack Overflow

Share Edit Follow Flag answered Apr 21, 2015 at 17:56


crispamares
530 4 9

It works and it's a little bit complicated. Thank you for your comment. – Leopoldo Apr 21, 2015 at
19:43

There several ways of making your selection from arrB a (9000,1) array:

2 np.hstack((arrA,arrB[:,[1]]))
np.hstack((arrA,arrB[:,1][:,None]))
np.hstack((arrA,arrB[:,1].reshape(9000,1)))
np.hstack((arrA,arrB[:,1].reshape(-1,1)))

One uses the concept of indexing with an array or list, the next adds a new axis (e.g.
np.newaxis ), the third uses reshape . These are all basic numpy array manipulation tasks.

Share Edit Follow Flag edited Apr 21, 2015 at 18:48 answered Apr 21, 2015 at 18:27
hpaulj
230k 14 253 376

https://stackoverflow.com/questions/29779401/python-array-matrix-dimension?rq=3 4/4

You might also like