相关疑难解决方法(0)

在NumPy阵列的每个单元处有效地评估函数

给定NumPy数组A,将相同函数f应用于每个单元格的最快/最有效的方法是什么?

  1. 假设我们将分配给A(I,J)F(A(I,J)) .

  2. 函数f没有二进制输出,因此掩码(ing)操作无济于事.

"明显的"双循环迭代(通过每个单元格)是最优解吗?

python performance numpy function vectorization

123
推荐指数
2
解决办法
11万
查看次数

Numpy修改数组到位?

我有以下代码试图规范化m x n数组的值(它将用作神经网络的输入,其中m是训练示例n的数量,并且是特征的数量).

但是,当我在脚本运行后检查解释器中的数组时,我发现这些值没有规范化; 也就是说,它们仍然具有原始值.我想这是因为array函数内部变量的赋值只能在函数中看到.

我怎样才能实现这种规范化?或者我必须从normalize函数返回一个新数组?

import numpy

def normalize(array, imin = -1, imax = 1):
    """I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)"""

    dmin = array.min()
    dmax = array.max()

    array = imin + (imax - imin)*(array - dmin)/(dmax - dmin)
    print array[0]


def main():

    array = numpy.loadtxt('test.csv', delimiter=',', skiprows=1)
    for column in array.T:
        normalize(column)

    return array

if __name__ == "__main__":
    a = main()
Run Code Online (Sandbox Code Playgroud)

python arrays numpy in-place

26
推荐指数
2
解决办法
2万
查看次数

将函数应用于pandas中的DataFrame中的每个单元格

是否可以将函数应用于pandas 的DataFrame 中的每个单元格?

我知道pandas.DataFrame.applymap但它似乎不允许就地应用程序:

import numpy as np
import pandas as pd
np.random.seed(1)
frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), 
                     index=['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
format = lambda x: '%.2f' % x
frame = frame.applymap(format)
print(frame)
Run Code Online (Sandbox Code Playgroud)

收益:

               b         d         e
Utah    1.624345 -0.611756 -0.528172
Ohio   -1.072969  0.865408 -2.301539
Texas   1.744812 -0.761207  0.319039
Oregon -0.249370  1.462108 -2.060141

            b      d      e
Utah     1.62  -0.61  -0.53
Ohio    -1.07   0.87  -2.30
Texas    1.74  -0.76   0.32
Oregon  -0.25   1.46  -2.06
Run Code Online (Sandbox Code Playgroud)

frame = frame.applymap(format) …

python dataframe pandas

6
推荐指数
1
解决办法
2447
查看次数

如何根据条件在`np.array()`中设置单元格值?

我有一个numpy数组和该数组中的有效值列表:

import numpy as np
arr = np.array([[1,2,0], [2,2,0], [4,1,0], [4,1,0], [3,2,0], ... ])
valid = [1,4]
Run Code Online (Sandbox Code Playgroud)

是否有一种很好的pythonic方法可以将所有数组值设置为零,这些方法不在有效值列表中并就地执行?执行此操作后,列表应如下所示:

               [[1,0,0], [0,0,0], [4,1,0], [4,1,0], [0,0,0], ... ]
Run Code Online (Sandbox Code Playgroud)

以下内容在内存中创建了一个数组副本,这对大型数组不利:

arr = np.vectorize(lambda x: x if x in valid else 0)(arr)
Run Code Online (Sandbox Code Playgroud)

它让我烦恼,现在我遍历每个数组元素并将其设置为零(如果它在valid列表中).

编辑:我找到了一个答案,表明没有就地功能来实现这一目标.也停止改变我的空白.更容易看到arr它们的变化.

python arrays numpy

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

找到矢量场的幅度(长度)平方的最快方法

我有一个大的矢量场,其中场很大(例如512 ^ 3;但不一定是正方形),矢量是2D或3D(例如形状是[512,512,512,2]或[512,512, 512,3]).

计算向量的平方幅度的标量场的最快方法是什么?

我可以绕过每个方向,即

import numpy as np
shp = [256,256,256,3]                       # Shape of vector field
vf = np.arange(3*(256**3)).reshape(shp)     # Create vector field
sf = np.zeros(shp[:3])                      # Create scalar field for result

for ii in range(shp[0]):
    for jj in range(shp[1]):
        for kk in range(shp[2]):
            sf[ii,jj,kk] = np.dot( vf[ii,jj,kk,:] , vf[ii,jj,kk,:] )
Run Code Online (Sandbox Code Playgroud)

但那是相当缓慢的,有什么更快的吗?

python math optimization numpy vector

4
推荐指数
1
解决办法
1247
查看次数

当条件为2时,有效地更新numpy数组

假设您有一个包含3或4个元素的numpy数组

例如:

3
4
4
4
3
3
3
Run Code Online (Sandbox Code Playgroud)

我想改变这个数组,这样如果一个元素是3,那么它应该变成一个数字X,如果元素是4,它应该变成一个数字Y.保证X不同于Y.对于上面的数组我们会得到:

X
Y
Y
Y
X
X
X
Run Code Online (Sandbox Code Playgroud)

我在考虑做这样的事情:

arr[arr==3]=X
arr[arr==4]=Y
Run Code Online (Sandbox Code Playgroud)

但是,如果X是4呢?然后最后整个数组将只包含Ys.

我试图避免出于性能原因使用for循环,但如果这是唯一的方法,我可以负担得起遵循该路线.

python performance numpy vectorization

2
推荐指数
1
解决办法
61
查看次数

如何对n×n numpy数组中的每个元素求平方?

我不需要任何for循环,并且想知道是否有可以使用的功能。

python numpy

-1
推荐指数
2
解决办法
5263
查看次数