相关疑难解决方法(0)

pandas.factorize with custom array datatype

Let's start off with a random (reproducible) data array -

# Setup
In [11]: np.random.seed(0)
    ...: a = np.random.randint(0,9,(7,2))
    ...: a[2] = a[0]
    ...: a[4] = a[1]
    ...: a[6] = a[1]

# Check values
In [12]: a
Out[12]: 
array([[5, 0],
       [3, 3],
       [5, 0],
       [5, 2],
       [3, 3],
       [6, 8],
       [3, 3]])

# Check its itemsize
In [13]: a.dtype.itemsize
Out[13]: 8
Run Code Online (Sandbox Code Playgroud)

Let's view each row as a scalar using custom datatype that covers two elements. We will use void-dtype for …

python arrays numpy python-3.x pandas

8
推荐指数
1
解决办法
318
查看次数

忽略稀疏矩阵中的重复条目

我已经尝试初始化csc_matrixcsr_matrix(data, (rows, cols))文档建议的值列表中进行初始化.

sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
Run Code Online (Sandbox Code Playgroud)

问题是,我实际上有用于产生方法data,rowscols载体引入重复对一些点.默认情况下,scipy会添加重复条目的值.但是,在我的情况下,这些重复项data对于给定的值具有完全相同的值(row, col).

我想要实现的是让scipy忽略第二个条目,如果已​​经存在,而不是添加它们.

忽略我可以改进生成算法以避免生成重复的事实,是否有参数或其他方法来创建忽略重复的稀疏矩阵?

目前两个条目与data = [4, 4]; cols = [1, 1]; rows = [1, 1];生成的稀疏矩阵,其值在(1,1)8同时所希望的值是4.

>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
        [0, 8, 0],
        [0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

我也知道我可以通过使用二维numpy unique函数来过滤它们,但是列表非常大,所以这不是一个真正有效的选项.

问题的其他可能答案:有没有办法指定如何处理重复项?即保持minmax代替默认sum

python numpy duplicates scipy sparse-matrix

7
推荐指数
1
解决办法
2135
查看次数

计算python中多维数组中数组的出现次数

我有以下类型的数组:

a = array([[1,1,1],
           [1,1,1],
           [1,1,1],
           [2,2,2],
           [2,2,2],
           [2,2,2],
           [3,3,0],
           [3,3,0],
           [3,3,0]])
Run Code Online (Sandbox Code Playgroud)

我想计算每种类型数组的出现次数,例如

[1,1,1]:3, [2,2,2]:3, and [3,3,0]: 3 
Run Code Online (Sandbox Code Playgroud)

我怎么能在python中实现这一点?是否可以不使用for循环并计入字典?它必须快速,并且应该花费不到0.1秒左右.我查看了Counter,numpy bincount等等.但是,这些是针对个别元素而不是数组.

谢谢.

python arrays numpy multidimensional-array

7
推荐指数
1
解决办法
1849
查看次数

Numpy独特的2D子阵列

我有3D numpy数组,我只想要独特的2D子数组.

输入:

[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]

 [[ 5  6]
  [ 7  8]]]
Run Code Online (Sandbox Code Playgroud)

输出:

[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]]
Run Code Online (Sandbox Code Playgroud)

我尝试将子数组转换为字符串(tostring()方法),然后使用np.unique,但在转换为numpy数组后,它删除了\ x00的最后一个字节,所以我无法使用np.fromstring()将其转换回来.

例:

import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]],[[5,6],[7,8]]])
b = [x.tostring() for x in a]
print(b)
c = np.array(b)
print(c)
print(np.array([np.fromstring(x) for x in c]))
Run Code Online (Sandbox Code Playgroud)

输出:

[b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00', b'\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00', b'\t\x00\x00\x00\n\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00', b'\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00']
[b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04'
 b'\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08'
 b'\t\x00\x00\x00\n\x00\x00\x00\x0b\x00\x00\x00\x0c'
 b'\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08'] …
Run Code Online (Sandbox Code Playgroud)

python numpy unique sub-array

7
推荐指数
1
解决办法
712
查看次数

与 NumPy 等效的 Pandas nunique

nunique在 numpy 中是否有与熊猫等效的行?我检查出np.uniquereturn_counts,但它似乎并没有回到我想要的东西。例如

a = np.array([[120.52971, 75.02052, 128.12627], [119.82573, 73.86636, 125.792],
       [119.16805, 73.89428, 125.38216],  [118.38071, 73.35443, 125.30198],
       [118.02871, 73.689514, 124.82088]])
uniqueColumns, occurCount = np.unique(a, axis=0, return_counts=True) ## axis=0 row-wise
Run Code Online (Sandbox Code Playgroud)

结果:

>>>ccurCount
array([1, 1, 1, 1, 1], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

我应该期待 all3而不是 all 1

解决方法当然是转换为熊猫并调用,nunique但存在速度问题,我想探索一个纯 numpy 实现来加快速度。我正在处理大型数据帧,所以希望尽可能找到加速。我也愿意接受其他解决方案以加快速度。

python numpy pandas

7
推荐指数
1
解决办法
1618
查看次数

如何在pandas中进行分组时计算列组合中的不同值?

我有一个熊猫数据框.我想通过使用一个列的组合对其进行分组,并计算另一个列组合的不同值.

例如,我有以下数据框:

   a   b    c     d      e
0  1  10  100  1000  10000
1  1  10  100  1000  20000
2  1  20  100  1000  20000
3  1  20  100  2000  20000
Run Code Online (Sandbox Code Playgroud)

我可以按列对其进行分组a,b并计算列中的不同d:

df.groupby(['a','b'])['d'].nunique().reset_index()
Run Code Online (Sandbox Code Playgroud)

结果我得到:

   a   b  d
0  1  10  1
1  1  20  2
Run Code Online (Sandbox Code Playgroud)

但是,我想在组合中计算不同的值.例如,如果我使用cd,那么在第一组中我只有一个唯一的组合((100, 1000))而在第二组中我有两个不同的组合:(100, 1000)(100, 2000).

以下幼稚的"概括"不起作用:

df.groupby(['a','b'])[['c','d']].nunique().reset_index()
Run Code Online (Sandbox Code Playgroud)

因为nunique()不适用于数据框架.

python group-by pandas

6
推荐指数
2
解决办法
2877
查看次数

如何测试 numpy 中所有行是否不同

在 numpy 中,是否有一种很好的惯用方法来测试二维数组中的所有行是否不同?

我以为我能做到

len(np.unique(arr)) == len(arr)
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用。例如,

arr = np.array([[1,2,3],[1,2,4]])
np.unique(arr)
Out[4]: array([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
1115
查看次数

计算numpy数组中列的出现次数

给定一个2 xd维numpy数组M,我想计算M每列的出现次数.也就是说,我正在寻找一般的版本bincount.

到目前为止我尝试过:(1)将列转换为元组(2)使用散列元组(via hash)到自然数(3)numpy.bincount.

这看起来很笨拙.有人知道更优雅高效的方式吗?

python numpy

5
推荐指数
2
解决办法
1817
查看次数

检查 numpy 数组列表是否相等

我有一个 numpy 数组列表,想要检查所有数组是否相等。做到这一点最快的方法是什么?

我知道 numpy.array_equal 函数(https://docs.scipy.org/doc/numpy-1.10.0/reference/ generated/numpy.array_equal.html),但据我所知,这仅适用于两个数组,我想相互检查 N 个数组。

我还找到了这个答案来测试列表中的所有元素:检查列表中的所有元素是否相同。但是,当我尝试接受的答案中的每种方法时,我得到一个异常(ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all())

谢谢,

python arrays numpy

5
推荐指数
1
解决办法
3112
查看次数

检查一个numpy数组中有多少个numpy数组等于另一个不同大小的numpy数组中的其他numpy数组

我的问题

假设我有

a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.array([9,10])])
b = np.array([ np.array([5,6]), np.array([1,2]), np.array([3,192])])
Run Code Online (Sandbox Code Playgroud)

它们是两个大小不同的数组,包含其他数组(内部数组的大小相同!)

我想计算b中有多少项(即内部数组)。请注意,我没有考虑他们的位置!

我怎样才能做到这一点?

我的尝试

count = 0
for bitem in b:
     for aitem in a:
         if aitem==bitem:
               count+=1
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?特别是一行,也许有些理解。

python arrays numpy

5
推荐指数
1
解决办法
339
查看次数