小编nor*_*ius的帖子

CMake:MacOS 上动态链接资源的运行时错误(dyld:库未加载)

问题

在 MacOS 上,我在运行时遇到依赖动态链接资源的 CMake 项目的链接问题——但只有在安装项目之后!当我只构建二进制文件而不安装它时,问题不会发生。

$ ./testapp
Hello world!
$ $INSTALLDIR/testapp
dyld: Library not loaded: @rpath/libvtkDomainsChemistryOpenGL2-7.1.1.dylib
  Referenced from: /Users/normanius/workspace/installdir/testapp
  Reason: image not found
[1]    76964 trace trap  /Users/normanius/workspace/installdir/testapp   
Run Code Online (Sandbox Code Playgroud)

最小示例

我能够在由CMakeLists.txt和组成的最小设置中重现该问题main.cpp。我要链接的库称为VTK (v7.1.1),它是使用共享库构建的(有关更多详细信息,请参见下文)。

# CMakeLists.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(test)

# Test application.
add_executable(testapp
               main.cpp)

# Find vtk (library that has to be linked to dynamically).
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
target_link_libraries(testapp ${VTK_LIBRARIES}) # <---- this causes the problem

# Install instructions.
install(TARGETS testapp DESTINATION "${CMAKE_INSTALL_PREFIX}")
Run Code Online (Sandbox Code Playgroud)

main.cpp甚至没有利用任何VTK对象。 …

macos cmake shared-libraries dylib vtk

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

将 Pandas join 中的列后缀转换为 MultiIndex

我有两个具有(不一定)相同索引和列名的 Pandas DataFrame。

>>> df_L = pd.DataFrame({'X': [1, 3], 
                         'Y': [5, 7]})

>>> df_R = pd.DataFrame({'X': [2, 4], 
                         'Y': [6, 8]})
Run Code Online (Sandbox Code Playgroud)

我可以将它们连接在一起并分配后缀。

>>> df_L.join(df_R, lsuffix='_L', rsuffix='_R')

    X_L Y_L X_R Y_R
0   1   5   2   6
1   3   7   4   8
Run Code Online (Sandbox Code Playgroud)

但我想要的是在“X”和“Y”下制作“L”和“R”子列。

所需的 DataFrame 如下所示:

>>> pd.DataFrame(columns=pd.MultiIndex.from_product([['X', 'Y'], ['L', 'R']]), 
         data=[[1, 5, 2, 6],
               [3, 7, 4, 8]])

    X       Y
    L   R   L   R
0   1   5   2   6
1   3   7   4   8
Run Code Online (Sandbox Code Playgroud)

有没有办法可以组合两个原始数据帧来获得所需的数据帧?

python pandas

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

np.ndarray.tobytes() 如何为 dtype“对象”工作?

我遇到了一个奇怪的行为,np.ndarray.tobytes()这让我怀疑它是否确定性地工作,至少对于dtype=object.

import numpy as np
print(np.array([1,[2]]).dtype)
# => object
print(np.array([1,[2]]).tobytes())
# => b'0h\xa3\t\x01\x00\x00\x00H{!-\x01\x00\x00\x00'
print(np.array([1,[2]]).tobytes())
# => b'0h\xa3\t\x01\x00\x00\x00\x88\x9d)-\x01\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

在示例代码中,[1, [2]]首先将混合 python 对象列表 ( ) 转换为 numpy 数组,然后使用tobytes().

为什么相同数据的重复实例化得到的字节表示不同?该文档仅说明它将 an 转换ndarray为原始 python 字节,但并未提及任何限制。到目前为止,我仅针对dtype=object. 数字数组总是产生相同的字节序列:

np.random.seed(42); print(np.random.rand(3).tobytes())
# b'\xecQ_\x1ew\xf8\xd7?T\xd6\xbbh@l\xee?Qg\x1e\x8f~l\xe7?'
np.random.seed(42); print(np.random.rand(3).tobytes())
# b'\xecQ_\x1ew\xf8\xd7?T\xd6\xbbh@l\xee?Qg\x1e\x8f~l\xe7?'
Run Code Online (Sandbox Code Playgroud)

我是否错过了有关 python/numpy 内存架构的基本知识?我在 Mac 上使用 numpy 1.17.2 版进行了测试。


上下文:我在尝试计算任意数据结构的哈希时遇到了这个问题。我希望我可以依靠 的基本序列化功能tobytes(),但这似乎是一个错误的前提。我知道这pickle是 python 中序列化的标准,但由于我不需要可移植性,而且我的数据结构只包含数字,我首先寻求 numpy 的帮助。

python numpy

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

如何在CMake中获得正则表达式的组匹配?

让我们看看下面的说明性示例.

set(TEXT "ab,cc,df,gg")
string(REGEX MATCHALL "((.)\\2)" RESULT "${TEXT}")
message("Result: ${RESULT}")  

# Expected:  Result: cc;gg
# Actual:    Result:
Run Code Online (Sandbox Code Playgroud)

比较regex101上的预期结果.

有没有人知道如何在上面的例子中正确检索匹配组1?这有可能与CMake一起使用吗?

我找不到很多关于CMake在网络中使用的正则表达式处理器的限制.谁知道更多?(在CMake FAQ中有一些关于此的内容)

感谢您的支持!

regex cmake

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

如何将元组中的每个元素除以单个整数?

我想将元组除以整数。我期望这样的事情:

tuple = (10,20,30,50,80)
output = tuple/10
print(output)
output = (1,2,3,5,8)
Run Code Online (Sandbox Code Playgroud)

python

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

自 Mac OS 10.11 El Capitan 起具有系统完整性保护的 DYLD_LIBRARY_PATH 技巧的替代方案

这是我所拥有的:

  • Mac OS 10.11 El Capitan
  • python 2.7.12,从python.org下安装 /Library/Frameworks/Python.framework/
  • PyCharm 2016.2.3
  • vtk 7.1.0

这是我所做的:

  • 在本地构建一个 python 模块。就我而言,这是vtk。有关摘要,请参阅我配置 vtk 的 CMake 调用。

    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"
    
    Run Code Online (Sandbox Code Playgroud)
  • 将 python 包安装在 python 可以找到的位置。就我而言,这是/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages 请注意,我需要DYLD_LIBRARY_PATH通过库所在的位置扩展/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/.

  • 如果我从终端启动python,我可以成功导入vtk。

    import vtk
    v = vtk.vtkVersion()
    print v.GetVTKVersion()
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果我尝试在 PyCharm 的 python 控制台中导入 vtk,我会收到以下错误:

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-2-b7e11aadda62>", line 1, in <module> …
    Run Code Online (Sandbox Code Playgroud)

python macos dyld vtk

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

Pandas read_csv dtype inference on file with many int columns,除了索引和列是字符串

我需要为我正在构建的推荐程序加载一个大的 .csv 文件(大约有 1000 万条记录)。我的输入文件如下所示(k 接近 ~400 列):

      P1    P2    ... Pk

a      1     1    ...  0
b      0     0    ...  0
c      0     0    ...  1
Run Code Online (Sandbox Code Playgroud)

我尝试通过此调用读取我的文件:

pd.read_csv(url,header=0, sep="\t",index_col=0,encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)

当我阅读文件时,Pandas错误地猜测我的数据中的所有数字都是 floats。我想强制数据为“int”类型,以便在加载过程中节省内存。我尝试使用选项:dtype=int,但这发出了一个错误:

ValueError: invalid literal for int() with base 10: 'a'
Run Code Online (Sandbox Code Playgroud)

我想这是因为我的索引和列是字符串。

我知道我可以尝试使用字典来手动指定列的数据类型,但是由于我正在构建一个推荐程序,因此我事先不知道我的文件的列和索引,我想避免重新 -每次加载新文件时创建字典。

如何指定read_csv方法只在我的表的数据上设置整数类型,而不是索引和列名?

python csv types type-inference pandas

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

如何将pandas DataFrame的列解压缩为多个变量

如果尺寸匹配,则列表或numpy数组可以解包为多个变量。对于3xN阵列,将执行以下操作:

import numpy as np 
a,b =          [[1,2,3],[4,5,6]]
a,b = np.array([[1,2,3],[4,5,6]])
# result: a=[1,2,3],   b=[4,5,6]
Run Code Online (Sandbox Code Playgroud)

如何对熊猫的柱子实现类似的行为DataFrame?扩展以上示例:

import pandas as pd 
df = pd.DataFrame([[1,2,3],[4,5,6]])
df.columns = ['A','B','C']    # Rename cols and
df.index = ['i', 'ii']        # rows for clarity
Run Code Online (Sandbox Code Playgroud)

以下内容无法正常工作:

a,b = df.T
# result: a='i',   b='ii'
a,b,c = df
# result: a='A',   b='B',   c='C'
Run Code Online (Sandbox Code Playgroud)

但是,我想得到的是以下内容:

a,b,c = unpack(df)
result: a=df['A'], b=df['B'], c=df['C']
Run Code Online (Sandbox Code Playgroud)

该功能unpack已经在熊猫中可用吗?还是可以通过简单的方式模仿它?

python syntactic-sugar pandas

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

使用“.loc”访问多索引数据帧时如何保留列顺序?

让我们给出以下带有多索引列的数据框

import numpy as np
import pandas as pd 

a = ['i', 'ii']
b = list('abc')
mi = pd.MultiIndex.from_product([a,b])
df = pd.DataFrame(np.arange(100,100+len(mi)*3).reshape([-1,len(mi)]), 
                  columns=mi)
print(df)
#     i             ii
#     a    b    c    a    b    c
# 0  100  101  102  103  104  105
# 1  106  107  108  109  110  111
# 2  112  113  114  115  116  117
Run Code Online (Sandbox Code Playgroud)

使用.loc[]和我尝试按照该顺序pd.IndexSlice选择列'c'和。'b'

idx = pd.IndexSlice
df.loc[:, idx[:, ['c','b']]]
Run Code Online (Sandbox Code Playgroud)

但是,如果我查看输出,就会发现所请求的顺序不被遵守!

#     i        ii
#     b    c    b …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

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

为什么 pandas.GroupBy.apply() 在某些情况下会忽略排序标志?

何时以及为何忽略DataFrame分组的排序标志pd.GroupBy.apply()?通过一个例子可以最好地理解这个问题。在以下虚拟问题的 4 个等效解决方案中,方法 1 和 4 观察排序标志,而方法 2 和 3 由于某种原因忽略它。

import pandas as pd
import numpy as np 

#################################################
# Construct input data:
cats = list("bcabca")
vals = np.arange(0,10*len(cats),10) 
df = pd.DataFrame({"i": cats, "ii": vals})

# df:
#      i  ii
#   0  b   0
#   1  c  10
#   2  a  20
#   3  b  30
#   4  c  40
#   5  a  50

# Groupby with sort=True
g = df.groupby("i", sort=True)

#################################################
# 1) …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas pandas-apply pandas-groupby

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