如何按嵌套的dtype对numpy数组进行排序?
我希望通过数组中的第一个元素对numpy数组进行排序
import numpy as np
from random import randint
# create dummy data
test = np.array([[[randint(1, 10) for _ in range(3)]] for _ in range(10)])
dtype = [('response', [('x', 'f'),('y', 'f'),('x', 'f
为了解决一个只可能逐个元素的问题,我需要将NumPy的元组索引和一个显式切片结合起来。
def f(shape, n):
"""
:param shape: any shape of an array
:type shape: tuple
:type n: int
"""
x = numpy.zeros( (n,) + shape )
for i in numpy.ndindex(shape): # i = (k, l, ...)
x[:,
我想构造一个继承自numpy.ndarray的类,这样它就可以像numpy数组(+,-,*,/,...)一样执行正常的操作。我想要更改的唯一一件事是我们访问数据中项的方式。例如:
import numpy as np
from PIL import Image
class Data(np.ndarray):
"""
Something magical here
"""
img = np.asarray(Image.open('lena.jpg'))
data = img.view(Data)
data[
我有一个三维的Numpy阵列,想要取一个轴上的平均值,考虑其他两个维度的某些元素。
这是一个描述我的问题的示例代码:
import numpy as np
myarray = np.random.random((5,10,30))
yy = [1,2,3,4]
xx = [20,21,22,23,24,25,26,27,28,29]
mymean = [ np.mean(myarray[t,yy,xx]) for t in np.arange(5) ]
然而,这样做的结果是:
ValueError: shape mismatch: objects cannot be broadcast to
如果我已经读取了相同的数组,我希望遍历数组,然后跳到下一个数组。下面的代码可以工作,但我正在搜索一个更“pythonic”风格的解决方案。
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = iris.data[:, :2]
read = []
for x in X:
temp = True
for r in read:
if np.array_equal(x, r):
temp = False
if temp:
现在,我正在尝试理解索引numpy结构化数组的可能方法,而且我有点被它困住了。仅举几个简单的例子:
import numpy as np
arr = np.array(zip(range(5), range(5, 10)), dtype=[('a', int), ('b', int)])
arr[0] # first row (record)
arr[(0,)] # the same, as expected
arr['a'] # field 'a' of each record
arr[('a',)] # &
我正在机器学习中的数据集上练习,虽然我使用了imputer类,但它给了我一个too many indices for array错误。对于这个错误,我只是查看了所有的numpy模块,但我没有任何想法来解决它。 import numpy as np
import matplotlib.pyplot as mlp
import pandas as pd
#import datasets
i_export = pd.read_csv("2018-2010_export.csv")
x=i_export.iloc[:, [0,1,3,4]].values
y=i_export.il
嗨,我想要一个使用词汇排序的numpy.array。
import numpy as np
surnames = ['Hertz', 'Galilei', 'Hertz']
names = ['Heinrich', 'Galilao', 'Gustav']
ind = np.lexsort((names,surnames))
但是如何根据这些索引对数组进行排序呢?
我会做
surnames2 = surnames.copy()
for i, a in enumerate(ind):
sur
我想迭代从最高值到最低值的索引开始的numpy数组。
import numpy as np #imports numpy package
elevation_array = np.random.rand(5,5) #creates a random array 5 by 5
print elevation_array # prints the array out
ravel_array = np.ravel(elevation_array)
sorted_array_x = np.argsort(ravel_array)
sorted_array_y = np.argsort(sorte
我正在尝试矢量化或以其他方式使循环的查找/匹配更快(可能使用numpy)。我研究过np.vectorize、numpy索引和np.where,但是找不到适合我需求的正确的实现/组合。
有关守则:
Sx = np.zeros((Np+1, 2*N+1))
rows, cols = prepped_array.shape[0], prepped_array.shape[1]
for ind1 in range(rows):
for ind2 in range(cols):
if prepped_array[ind1][ind2][0] != -1:
我刚刚开始使用Numpy,并注意到遍历Numpy数组中的每个元素比使用列表列表进行迭代要慢大约4倍。我现在知道这违背了Numpy的目的,如果可能的话,我应该向量化这个函数。我的问题是为什么它的速度要慢4倍。这似乎是一个相当大的数额。
我使用%timeit运行了下面的测试
import numpy as np
b = np.eye(1000)
a = b.tolist()
%timeit b[100][100] #1000000 loops, best of 3: 692 ns per loop
%timeit a[100][100] #10000000 loops, best of 3: 7
我在Numpy中使用两个条件选择行时遇到了困难。以下代码不返回预期的输出
tot_length=0.3
steps=0.1
start_val=0.0
list_no =np.arange(start_val, tot_length, steps)
x, y, z = np.meshgrid(*[list_no for _ in range(3)], sparse=True)
a = ((x>=y) & (y>=z)).nonzero() # this maybe the problem
输出
(array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2]),
为了利用numpy.complex64存储数据的方式(连续的,交替的实数和虚数部分),我尝试对numpy进行子类化,但使用我自己的__add__,__sub__,...例程。
我的问题是,当我创建一个numpy.ndarray,设置dtype=mysubclass时,我得到了一个带有dtype='numpy.complex64'的numpy.ndarray,这导致numpy不使用我自己的函数进行加法和减法等操作。
示例:
import numpy as np
class mysubclass(np.complex64):
pass
a = mysubclass(1+1
我正在尝试实现一种算法,在python中用给定的和来计数子集。
import numpy as np
maxN = 20
maxSum = 1000
minSum = 1000
base = 1000
dp = np.zeros((maxN, maxSum + minSum))
v = np.zeros((maxN, maxSum + minSum))
# Function to return the required count
def findCnt(arr, i, required_sum, n) :
# Base case
if (i == n) :
熊猫群由"ngroup“函数按”组“顺序标记每组。
我正在寻找类似的行为,但需要分配的标签是原始(索引)顺序,我如何能够这样做有效(这将经常发生在大熊猫和numpy?
> df = pd.DataFrame(
{"A": [9,8,7,8,9]},
index=list("abcde"))
A
a 9
b 8
c 7
d 8
e 9
> df.groupby("A").ngroup()
a 2
b 1
c 0
d 1
e 2
# LOOKIN
我试图将过滤后的值从Numpy数组传递到一个函数中。我只需要通过Numpy数组传递高于某个值的值,以及它们的索引位置。
我试图通过使用Numpys自己的过滤系统来避免迭代python中的整个数组,我正在处理的数组中有20k的值,可能只有很少的值是相关的。
import numpy as np
somearray = np.array([1,2,3,4,5,6])
arrayindex = np.nonzero(somearray > 4)
for i in arrayindex:
somefunction(arrayindex[0], somearray[arrayindex
我有两个numpy数组a和b,有2000万个元素(浮点数)。如果这两个数组的组合元素是相同的,那么我们称之为复制,应该从两个数组中删除它。例如,
a = numpy.array([1,3,6,3,7,8,3,2,9,10,14,6])
b = numpy.array([2,4,15,4,7,9,2,2,0,11,4,15])
从这两个数组中,我们有a[2]&b[2]与a[11]&b[11]相同,然后我们称它为重复元素,应该删除它。与a[1]&b[1]和a[3]&b[3]一样,虽然每个数组本身都有重复的元素,但它们并不被视为重复的元素。因此,我希望返回的数组为:
我需要用字母'K‘替换下面数组中的一些字母。但是每次我使用numpy.replace,然后使用numpy.delete时,它都会改变数组的形状。是否可以在不更改数组形状的情况下更改数组中选定的字母?
AA = [['A', 'B', 'C']]
AA = np.array(AA)
AA = np.repeat(AA, 5, axis=0)
AA = np.delete(AA, (1))
AA = np.insert(AA, (1), 'K')
我希望能够用'K‘替换let数组中的任何字母。
有什么简单的方法吗?