在 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对象。 …
我有两个具有(不一定)相同索引和列名的 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)
有没有办法可以组合两个原始数据帧来获得所需的数据帧?
我遇到了一个奇怪的行为,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 的帮助。
让我们看看下面的说明性示例.
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中有一些关于此的内容)
感谢您的支持!
我想将元组除以整数。我期望这样的事情:
tuple = (10,20,30,50,80)
output = tuple/10
print(output)
output = (1,2,3,5,8)
Run Code Online (Sandbox Code Playgroud) 这是我所拥有的:
/Library/Frameworks/Python.framework/这是我所做的:
在本地构建一个 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)我需要为我正在构建的推荐程序加载一个大的 .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方法只在我的表的数据上设置整数类型,而不是索引和列名?
如果尺寸匹配,则列表或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已经在熊猫中可用吗?还是可以通过简单的方式模仿它?
让我们给出以下带有多索引列的数据框
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) 何时以及为何忽略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)