How to build set of indices to reference an array [duplicate] - python

This question already has answers here:
Numpy array of multiple indices replace with a different matrix
(2 answers)
Closed 5 years ago.
If I have:
x = np.asarray([[1,2],[3,4],[5,6]])
And I would like to create:
y = np.asarray([1,4,5])
In order to do this, I built an array as follows:
inds = np.asarray([[0,0],[1,1],[2,0]])
And I passed it to x as follows:
y = x[inds]
This does not yield the elements indexed by the rows in inds. How do I achieve this functionality in either this fashion, or a fashion very similar to this?

This is what advanced indexing for; Extract the row index and column index into two separate arrays and use them to subset the array:
x[inds[:,0], inds[:,1]]
# array([1, 4, 5])
​

Related

What is right method for 1-d array/row vector transposition? [duplicate]

This question already has answers here:
Transposing a 1D NumPy array
(15 answers)
numpy's transpose method can't convert 1D row ndarray to a column one [duplicate]
(2 answers)
Numpy transpose of 1D array not giving expected result
(4 answers)
Closed last month.
I know the simple/worked solution to this question is reshape (-1, 1) for turning row vector (numpy.array) into a column vector (numpy.array).
Specifically, I want to understand why numpy.transpose(a) won't work.
Say,
vector_of_1 = np.transpose(np.ones(N)) # statement 1
And if I define a column vector b, and use the following statement:
V = b + vector_of_1
I would get a weird matrix V.
My fix is to use
vector_of_1 = np.ones(N).reshape(-1,1)
And it works as expected (V being a column vector).
But I want to understand why the transpose method (i.e., statement 1) won't work. Detailed explanation is appreciated.

How to extract specific part of a numpy array? [duplicate]

This question already has answers here:
Numpy: find index of the elements within range
(12 answers)
How to return indices of values between two numbers in numpy array
(2 answers)
How to conditionally select elements in numpy array
(2 answers)
Closed 1 year ago.
I have the following data lets call it y with the corresponding x values. Plotting plt.plot(x,y) results in: I now want to extract a specific part of that data that is between the x-values of 8.6075 and 8.62. Plotting the part using plt.xlim(8.6075, 8.62) gives the following. I have tried to find the indices using of the x-values using index1=np.where(x==8.6075), index2=np.where(x==8.62) and than just cutting out that specific part of the data using y_cutout = y[index1:index2]. The problem was that the exact values 8.6075 and 9.62 have no indices that they are defined on.
You can find the index of the nearest value by creating a new array of the differences between the values in the original array and the target, then find the index of the minimum value in the new array.
For example, starting with an array of random values in the range 5.0 - 10.0:
import numpy as np
x = np.random.uniform(low=5.0, high=10.0, size=(20,))
print(x)
Find the index of the value closest to 8 using:
target = 8
diff_array = np.absolute(x - target)
print(diff_array)
index = diff_array.argmin()
print(index, x[index])
Output:
[7.74605146 8.31130556 7.39744138 7.98543982 7.63140243 8.0526093
7.36218916 6.62080638 6.18071939 6.54172198 5.76584536 8.69961399
5.83097522 9.93261906 8.21888006 7.63466418 6.9092988 9.2193369
5.41356164 5.93828971]
[0.25394854 0.31130556 0.60255862 0.01456018 0.36859757 0.0526093
0.63781084 1.37919362 1.81928061 1.45827802 2.23415464 0.69961399
2.16902478 1.93261906 0.21888006 0.36533582 1.0907012 1.2193369
2.58643836 2.06171029]
3 7.985439815743841
You can make a selection by following
y_cutout = y[(x >= 8.6075) & (x <= 8.62)]
(Fixed as #AcaNg mentioned in the comment)

Sort rows of a 2d numpy array in ascending order [duplicate]

This question already has answers here:
Python Numpy Sort rows [duplicate]
(2 answers)
Closed 2 years ago.
I have an numpy array arr with shape (1500,10) where each element is a digit from 0 to 9. I'd like to sort the array as each row's elements are concatenated to form a single number and then sort these numbers in ascending order.Let a simple array be like:
arr = ([[3,4,1,5,1,2,3,4,5,6],
[1,2,3,5,6,2,9,2,1,2],
[0,3,1,4,2,1,6,8,2,1],
[0,1,3,5,1,2,9,2,1,7],
[2,3,5,7,1,2,5,7,1,5]])
it should return
arr = ([[0,1,3,5,1,2,9,2,1,7],
[0,3,1,4,2,1,6,8,2,1],
[1,2,3,5,6,2,9,2,1,2],
[2,3,5,7,1,2,5,7,1,5],
[3,4,1,5,1,2,3,4,5,6]])
You can do the following:
arr[np.lexsort(np.flip(arr.transpose(), axis=0))]

How to adjust dimensions in numpy.array [duplicate]

This question already has answers here:
Convert Python sequence to NumPy array, filling missing values
(8 answers)
Convert list of lists with different lengths to a numpy array [duplicate]
(3 answers)
Closed 3 years ago.
all
I have a numpy array, the dimension of the element is different. for example:
[
[1,2,3],
[2,3,4,5,6]
[1,2]
]
I want to adjust the element dimension, set the dimension as the largest one, and fill with 0, how can I do it?
You can create a placeholder with the desired shape first, then fill the placeholder with the data list
data = [[1,2,3], [2,3,4,5,6], [1,2]]
# create a placeholder
tmp = np.zeros((len(data), max([len(item) for item in data])))
# fill the placeholder with data
for ind, line in enumerate(data):
tmp[ind, :len(line)] = line
However, this may not be super fast when the size of the data list is large.

Get the count of each unique values included in an numerical array using numpy.unique [duplicate]

This question already has answers here:
Frequency counts for unique values in a NumPy array
(17 answers)
Closed 4 years ago.
Given an numpy array a, I can use np.unique(a) to generate the unique values included in a. How can I get the count of each unique values included in a?
Since you mentioned np.unique, it accepts a second argument called return_counts:
u, c = np.unique(a, return_counts=True)
c[i] is the corresponding count for u[i].

Categories

Resources