小编Dan*_*iel的帖子

需要更快的python代码来计算样本熵

这是我在为样本熵编写python代码时遇到的问题.

map(max, abs(a[i]-a) ) 非常慢

还有其他功能表现更好map()吗?

andarray 在哪里看起来像np.array([ [1,2,3,4,5],[2,3,4,5,6],[3,4,5,3,2] ])

python numpy entropy

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

在Numpy中乘以块矩阵

大家好我是python新手我必须为课堂作业实施套索L1回归.这涉及求解涉及块矩阵的二次方程.

minimize x^t * H * x  + f^t * x 
where x > 0
Run Code Online (Sandbox Code Playgroud)

其中H是2×2块矩阵,其中每个元素是ak维矩阵,x和f是2×1矢量,每个元素是ak维矢量.

我在考虑使用ndarrays.

这样:

  np.shape(H) = (2, 2, k, k)
  np.shape(x) = (2, k)
Run Code Online (Sandbox Code Playgroud)

但我发现np.dot(X,H)在这里不起作用.有没有简单的方法来解决这个问题?提前致谢.

python regression numpy machine-learning matrix

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

Python:计算数组中相同的行(没有任何导入)

例如,给定:

import numpy as np
data = np.array(
    [[0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 0, 1],
    [0, 1, 1],
    [0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

我想得到一个三维数组,看起来像:

result = array([[[ 2.,  0.],
                 [ 0.,  2.]],

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

一种方法是:

for row in data
    newArray[ row[0] ][ row[1] ][ row[2] ] += 1
Run Code Online (Sandbox Code Playgroud)

我想要做的是以下内容:

for i in dimension1
   for j in dimension2
      for k in dimension3
          result[i,j,k] = (data[data[data[:,0]==i, 1]==j, 2]==k).sum()
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我想通过坚持我的实现而不是在开头提到的那个(或使用任何额外的导入,例如计数器)来实现期望的结果.

谢谢.

python arrays numpy list

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

将Mathematica中的多个3D对象放在同一个3D框中

我有一个由mathematica中的ListPlot3D创建的3D表面.表面本身是相对平面的并且在任意平面xy中.我想将这个表面放在分子的顶部,该分子是从ChemicalData函数生成的,或者是从.pdb或其他分子输入输入的.该分子也是平面的并且再次放置在xy平面中.我希望这两个3D对象分开一些z距离.

最终的希望是,我将在这个平面分子上面放置一个潜在的能量表面,它仍然可以在3D中旋转.我一直在使用Show和Graphics 3D选项没有成功.表面上的x,y点对应于3D分子上的x,y点,但是它们可以根据需要容易地缩放和移位.作为最后的选择,我想我可以输入原子的x,y,z坐标,并使用PointListPlot3D命令和各种选项来模仿分子的外观,但这似乎要复杂得多.

另一种可能的方法是将两个3D对象转换为3D框并简单地堆叠在彼此之上.但是我还没有在mathematica中找到这个功能.有没有人对如何做到这一点有任何想法?

PES = ListPlot3D[{{0., 0., -2.04900365`},..., {0., 0.3, -2.05743098`}}]
Show[Graphics3D[ChemicalData["Benzene","MoleculePlot"]],PES]
Run Code Online (Sandbox Code Playgroud)

问题是分子的规模与能量表面的规模.

我能说的最好的单位是皮米.然而,它们的原子距离似乎偏差了3%.

作为对此的更新,采用分子的xyz坐标并手动生成对象变得更加简单.已经有一段时间但我相信如果你只说:

ChemicalData["Benzene","MoleculePlot"]
Run Code Online (Sandbox Code Playgroud)

Mathematica将向您展示格式.如果您执行其中许多操作,则可以制作相当简单的python脚本.

3d wolfram-mathematica

3
推荐指数
2
解决办法
2594
查看次数

如何将excel中的矩阵导入numpy然后绘制图形?

我在excel中有一个矩阵,我试图导入并转换为numpy矩阵,然后用networkx绘制它,我将如何进行此操作?我确实有一些代码但不确定我是否正确地执行此操作.

import networkx as nx
import pandas as pd
import numpy 
from numpy import genfromtxt

df=numpy.recfromcsv("Correlation_test.csv", delimiter=',', skiprows=1)

nx.Graph(df)
Run Code Online (Sandbox Code Playgroud)

谢谢

这是我到目前为止,但我一直收到错误说"输入不是一个正确的numpy矩阵或数组".

python excel numpy networkx

3
推荐指数
1
解决办法
3691
查看次数

使用Numpy创建Legendre公式

所以,我试图使用numpy.polynomial.legendre命令来生成P2到Pn多项式公式.我想输入2并且它给我p2 = 1/2 *(-1 +3x**2)或者如果输入是3则它得到我的P3公式.

这样我可以给x值计算每个Pn并使用我的一些类方法来计算错误以找到根.

我设法使用以下内容制作Plot:

 numpy.polynomial.legendre.legval (x, np.identity(10))
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib formula

3
推荐指数
1
解决办法
3994
查看次数

计算numpy ndarray中元素的数量

如何计算ndarray中每个数据点的元素数?

我想要做的是在我的ndarray中至少出现N次的所有值上运行OneHotEncoder.

我还想将所有出现少于N次的值替换为它没有出现在数组中的另一个元素(让我们称之为new_value).

所以我举例说:

import numpy as np

a = np.array([[[2], [2,3], [3,34]],
              [[3], [4,5], [3,34]],
              [[3], [2,3], [3,4] ]]])
Run Code Online (Sandbox Code Playgroud)

阈值N = 2我想要的东西:

b = [OneHotEncoder(a[:,[i]])[0] if count(a[:,[i]])>2 
else OneHotEncoder(new_value) for i in range(a.shape(1)]
Run Code Online (Sandbox Code Playgroud)

所以只有理解我想要的替换,不考虑onehotencoder和使用new_value = 10我的数组应该是这样的:

a = np.array([[[10], [2,3], [3,34]],
                [[3], [10], [3,34]],
                [[3], [2,3], [10] ]]])
Run Code Online (Sandbox Code Playgroud)

python numpy

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

Numpy:排成一排

我想弄清楚如何对数组的每两行求和.EG在此示例中将a转换为b:

a=array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

b=array([[ 4,  6,  8, 10],
       [20, 22, 24, 26]])
Run Code Online (Sandbox Code Playgroud)

当前代码看起来像这样:

b=[]
for num in range(len(a)/2):
    b.append(a[num*2]+a[num*2+1])
Run Code Online (Sandbox Code Playgroud)

当然必须有一个更快的方式.感谢您的时间.

回答如下:

b=a[::2,:]+a[1::2,:]
Run Code Online (Sandbox Code Playgroud)

这实际上帮助我扩展了如何跳过最初两行的次要问题.

>>> a=np.arange(24).reshape(6,-1)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
>>> b=np.vstack((a[:2],a[2::2,:]+a[3::2,:]))
>>> b
array([[ 0,  1,  2,  3], …
Run Code Online (Sandbox Code Playgroud)

python numpy multidimensional-array

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

为什么将 wcout/wcerr 重定向到 /dev/null 会导致程序崩溃?

考虑我的日志记录类

void LogWriter::InitLogWriter(void)
{
    wcout.flush();
    wcerr.flush();
    COUT_BACKUP = wcout.rdbuf(); // save original cout buffer
    CERR_BACKUP = wcerr.rdbuf(); //save original cerr buffer
    FileStreamOpen = false;
    switch(m_nTraceLvl)
    {
    case OffLevel:
        StopOutput();
        break;
    case ErrorLevel:
        OutputErrorsToFile(s_TraceFile);
        break;
    case DetailLevel:
        OutputAllToFile(s_TraceFile);
        break;
    default:
        StopOutput();
        break;
    }
    wcout << "Initialize Log Writer" << endl;
}
void LogWriter::OutputAllToFile(TCHAR* fileName)
{
    wstreambuf* fb = GetFileBufferStream(fileName);

    wcout.rdbuf(fb); // push wcout buffer to file
    wcerr.rdbuf(fb); // push cerr buffer to file

    FileStreamOpen = true;
}
void LogWriter::OutputErrorsToFile(TCHAR* fileName)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ redirect wofstream

0
推荐指数
1
解决办法
921
查看次数